[Java] split d'un String/expression reguliere

Résolu/Fermé
Tony - 27 mai 2008 à 16:21
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 - 28 mai 2008 à 15:43
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 :)
A voir également:

7 réponses

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 :)
2
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
0
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 177
27 mai 2008 à 16:26
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???
0
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
0
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 177
27 mai 2008 à 16:51
Si bien sûr.

Mais je vois difficilement comment améliorer cela.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 177
27 mai 2008 à 17:03
Je suis exactement comme toi ;).

Et peut-être existe-t-il une méthode plus simple mais en tout cas je vois pas.
0
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 177
28 mai 2008 à 15:43
Effectivement pas mal.

Bravo
0