OVH Cloud OVH Cloud

regex

12 réponses
Avatar
Alex
Bonjour,

j'ai besoin de 'spliter' une chaîne, avec comme séparateur un caractère
unique.

Exemple : séparateur 'x'
String s = "blablaxblablaxxblaxxblablabla";
String[] array = s.split(regex);

je voudrais récupérer dans array :
blabla
blablaxxblaxxblablabla

J'ai essayé diverses expressions, mais nada. Help?

Merci

10 réponses

1 2
Avatar
Eric Jacoboni
Alex writes:

je voudrais récupérer dans array :
blabla
blablaxxblaxxblablabla


Chez moi, ce code fait ce que tu recherches :

public static void main(String[] args) {
String s = "blablaxblablaxxblaxxblablabla";
String[] array = s.split("x");
for (String ch : array)
System.out.println(ch);

}

--
Éric Jacoboni, né il y a 1430665224 secondes

Avatar
Zazoun
Si, comme je le comprends, tu veux couper ta chaîne de caractères à
la première occurence de x uniquement (et donc couper ta chaîne de
caractères en 2), tu peux faire s.split("x", 2).
Avatar
Giuliani
Bonjour,

j'ai besoin de 'spliter' une chaîne, avec comme séparateur un caractère
unique.

Exemple : séparateur 'x'
String s = "blablaxblablaxxblaxxblablabla";
String[] array = s.split(regex);

je voudrais récupérer dans array :
blabla
blablaxxblaxxblablabla

J'ai essayé diverses expressions, mais nada. Help?

Merci
Bonjour,

essayez la classe StringTokenizer...

Avatar
Alex
Merci de ta réponse.
En fait je veux couper ma chaîne aux occurences simples (x et pas xx)

Exemple :
blaxblablaxxblaxblaxxblablablaxblabla

doit devenir
bla
blablaxxbla
blaxxblablabla
blabla



Si, comme je le comprends, tu veux couper ta chaîne de caractères à
la première occurence de x uniquement (et donc couper ta chaîne de
caractères en 2), tu peux faire s.split("x", 2).



Avatar
Lionel
Giuliani wrote:
Bonjour,

j'ai besoin de 'spliter' une chaîne, avec comme séparateur un
caractère unique.

Exemple : séparateur 'x'
String s = "blablaxblablaxxblaxxblablabla";
String[] array = s.split(regex);

je voudrais récupérer dans array :
blabla
blablaxxblaxxblablabla

J'ai essayé diverses expressions, mais nada. Help?

Merci
Bonjour,

essayez la classe StringTokenizer...


StringTokenizer ne fera pas la distinction entre x et xx.


Avatar
Alex
Exact, je viens d'essayer, pas de différence.

Giuliani wrote:


Bonjour,

j'ai besoin de 'spliter' une chaîne, avec comme séparateur un
caractère unique.

Exemple : séparateur 'x'
String s = "blablaxblablaxxblaxxblablabla";
String[] array = s.split(regex);

je voudrais récupérer dans array :
blabla
blablaxxblaxxblablabla

J'ai essayé diverses expressions, mais nada. Help?

Merci


Bonjour,
essayez la classe StringTokenizer...



StringTokenizer ne fera pas la distinction entre x et xx.






Avatar
Zazoun
Dans ce cas j'ai une solution en passant par la classe
java.util.regex.Pattern, avec le pattern "([^x]|x{2,})+" :
On recherche dans la chaîne de caractères les suites de caractères
ne comportant pas de "x" ou comportant une suite d'au moins 2 "x".

String s = "blablaxblablaxxxblaxblablabla";
Pattern p = Pattern.compile("([^x]|x{2,})+");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("m.group(0) = " + m.group(0));
}
Avatar
Alex
ça marche parfaitement, c'est génial!
J'étais obsédé par le split, c'était un erreur.

Merci beaucoup.


Dans ce cas j'ai une solution en passant par la classe
java.util.regex.Pattern, avec le pattern "([^x]|x{2,})+" :
On recherche dans la chaîne de caractères les suites de caractères
ne comportant pas de "x" ou comportant une suite d'au moins 2 "x".

String s = "blablaxblablaxxxblaxblablabla";
Pattern p = Pattern.compile("([^x]|x{2,})+");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("m.group(0) = " + m.group(0));
}



Avatar
Laurent Bossavit
J'ai essayé diverses expressions, mais nada. Help?


<< Some people, when confronted with a problem, think 'I know, I'll use
regular expressions.' Now they have two problems. >> -- Jamie Zawinski

Pourquoi pas une petite boucle "while", un indice entier qu'on va
incrémenter à chaque passage... "Tant que je ne suis pas au bout de la
chaine, vérifier si le caractère à l'indice courant est le séparateur et
qu'il est isolé (ni suivi, ni précédé de lui-même), si c'est le cas
ajouter à ma liste de morceaux la sous-chaîne strictement comprise entre
la précédente position de séparateur et l'actuelle."

Laurent

Avatar
Eric Jacoboni
Alex writes:

Merci de ta réponse.
En fait je veux couper ma chaîne aux occurences simples (x et pas xx)

Exemple :
blaxblablaxxblaxblaxxblablablaxblabla

doit devenir
bla
blablaxxbla
blaxxblablabla
blabla


Ah... En ce cas, effectivement, la solution de mon article précédent
avec split ne fonctionnera pas. Il faudra passer par Pattern.

--
Éric Jacoboni, né il y a 1430669291 secondes

1 2