Rechercher : dans
Par :

[Java] split d'un String/expression reguliere

Dernière réponse le 28 mai 2008 à 15:43:46 Tony, le 27 mai 2008 à 16:21:16 
 Signaler ce message aux modérateurs

Bonjour a tous :),

Voila je vous expose mon probleme : je cherche a decouper un String (en Java) d'une certaine maniere seulement je n'ai pas reussi a trouver une l'expression reguliere correspondante. Un petit exemple sera plus parlant :
Je veux decouper ce String :
Voici la "chaine que je veux " decouper et j'y [arrive pas]
En fait, j'aimerais, a l'aide de la methode String.split(expression) pouvoir decouper cette chaine comme ceci :
Voici la
"chaine que je veux"
decouper et j'y
[arrive pas]
En gros, je veux decouper la chaine a partir des espaces quie ne sont pas contenus dans les guillemets, ni dans les crochets. J'ai pas mal lutte et j'ai toujours pas reussi a trouver d'expressions qui marchent (a dire vrai je ne sais pas si il y en a). J'ai aussi penser a faire plusieurs split() successifs (genre 1 pour les guillemets, puis un pour les crochets et un pour les espaces) mais bon je me suis dit ca fait un peu trop a l'arrache :p
Donc voila j'espere que quelqu'un saura trouver la reponse (positive ou negative), ou bien me proposer une autre solution, parce que sinon ca sent les split() successifs :p

Merci bien :)

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « [Java] split d'un String/expression reguliere » dans :
Google - Recherche d'une expression exacte VoirLorsque l’on souhaite faire la recherche d’une expression exacte, il suffit de mettre cette expression entre guillemets. Exemple : "animal domestique" référencera uniquement les sites comportant l’expression "animal domestique".
[RegExp] Récupérer une adresse IP VoirFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Java: Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

goulamass, le 27 mai 2008 à 16:26:17

Bonjour,

Honnêtement à part faire ces splits successifs je vois aps ce que tu pourrais faire d'autres.

Mais en quoi cela te gène t'il???

Répondre à goulamass

2

Tony, le 27 mai 2008 à 16:35:46

Bah en fait je me dit qu'avec une expression reguliere ca fait d'un plus propre et de deux je dois l'utiliser plusieurs fois pour des chaines qui par exemple ne contiendraient pas de crochets mais des guillemets, ou des chaines qui ne contiendraient pas de guillemets mais des crochets, ou encore des chaines qui ne contiendraient aucun des deux, uniquement des espaces "simples", ainsi cela m'evite d'avoir a parcourir la chaine avant pour savoir avec quels caracteres je dois utiliser avec la methode split().
Je sais pas si j'ai ete clair :p

Répondre à Tony

3

goulamass, le 27 mai 2008 à 16:51:23

Si bien sûr.

Mais je vois difficilement comment améliorer cela.

Répondre à goulamass

4

Tony, le 27 mai 2008 à 16:56:37

Ouais c'est pour ca que je poste cette question, n'etant pas une bete en Java ni en expression reguliere, je me suis dit que j'etais peut etre passe a cote de quelque chose, ou qu'il y avait une autre methode ou classe que quelqu'un connaissait. Et puis surtout, sans expressions regulieres, je dois repeter plusieurs fois les splits sur differentes methodes, et comme tout bon programmeur (sans fausse modestie), je suis un peu un flemmard ^^

Merci tout de meme

Répondre à Tony

5

goulamass, le 27 mai 2008 à 17:03:00

Je suis exactement comme toi ;).

Et peut-être existe-t-il une méthode plus simple mais en tout cas je vois pas.

Répondre à goulamass

6

Tony, le 27 mai 2008 à 17:10:47

Ouais c'est possible, parce que j'ai eu beau cherche dans tous ce qui concernait les Pattern, regex et tout, mais bon trouver des expressions regulieres c'est pas ce qui m'emballe le plus :p.

Parce que avec les differents splits pas de probemes, j'y arrive, cependant j'ai pas trop envie de repeter les memes actions a chaque fois que je fais une nouvelle methode, et puis j'ai envie d'avoir un code propre et assez generaliste, qui puisse etre reutilisable et modifiable facilement plus tard.

Enfin bon, je crois que je vais m'anuser a "splitter" tout ca ^^

Merci encore :)

Répondre à Tony

7

Tony, le 28 mai 2008 à 15:29:46
  • +3

Probleme resolu, voici la solution

public class Def {

private final String s = "\\s*((([^\"\\[\\]\\s]+))|(\\[([^\\]]+)\\])|(\\\"([^\"]+)\\\"))\\s*";

public static void main(String[] args) {
Def d = new Def("Voici la \"chaine que je veux \" decouper et j'y [arrive pas] ");
}

public Def(String aString){
Pattern p = Pattern.compile(s);
Matcher m = p.matcher(aString);
Vector<String> tmp = new Vector<String>();
while(m.find()){
tmp.add(m.group(1));
}
//petit affichage pour verifier les valeurs du Vector
for(int i=0;i<tmp.size();i++)
System.out.println(tmp.elementAt(i));
}
}


Plus besoin de split()

Merci

Répondre à Tony

8

 goulamass, le 28 mai 2008 à 15:43:46

Effectivement pas mal.

Bravo

Répondre à goulamass