[Java] split d'un String/expression reguliere

[Résolu/Fermé]
Signaler
-
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
-
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 :)

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

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
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
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???
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
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Si bien sûr.

Mais je vois difficilement comment améliorer cela.
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
Messages postés
1426
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
11 janvier 2010
176
Je suis exactement comme toi ;).

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

Bravo