web-dev-qa-db-fra.com

Comment diviser une chaîne avec des caractères d'espacement comme délimiteurs?

Quel modèle de regex faudrait-il pour que je passe à la méthode Java.lang.String.split() afin de scinder une chaîne en un tableau de sous-chaînes en utilisant tous les caractères d'espacement ('', '\ t', '\ n', etc.) comme délimiteurs?

533
mcjabberz

Quelque chose dans les lignes de

myString.split("\\s+");

Cela regroupe tous les espaces blancs en tant que délimiteur.

Donc si j'ai la ficelle:

"Hello[space][tab]World"

Cela devrait donner les chaînes "Hello" et "World" et omettre l'espace vide entre [space] et [tab].

Comme l'a souligné VonC, la barre oblique inversée doit être échappée, car Java essaierait d'abord d'échapper la chaîne à un caractère spécial et d'envoyer cela à analyser. Ce que vous voulez, c'est le littéral "\s", ce qui signifie que vous devez passer "\\s". Cela peut devenir un peu déroutant.

Le \\s est équivalent à [ \\t\\n\\x0B\\f\\r]

928
Henrik Paul

Dans la plupart des dialectes regex, il existe un ensemble de résumés de caractères pratiques que vous pouvez utiliser pour ce genre de choses. Ce sont de bons exemples à retenir:

\w - Correspond à n'importe quel caractère Word.

\W - Correspond à tout caractère non-mot.

\s - Correspond à n'importe quel caractère d'espace blanc.

\S - Correspond à autre chose qu'aux caractères d'espacement.

\d - Correspond à n'importe quel chiffre.

\D - Correspond à tout sauf aux chiffres.

Une recherche sur "Regex Cheatsheets" devrait vous rapporter beaucoup de résumés utiles.

85
glenatron

Pour que cela fonctionne en Javascript, je devais faire ce qui suit:

myString.split(/\s+/g)
61
Mike Manard

"\\ s +" devrait faire l'affaire

35
VonC

Aussi, vous pouvez avoir un espace insécable UniCode xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
10
jake_astub
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
10
Arrow

Apache Commons Lang a une méthode pour diviser une chaîne avec des caractères d'espaces en tant que délimiteurs:

StringUtils.split("abc def")

http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html#split (Java.lang.String)

Cela pourrait être plus facile à utiliser qu'un motif regex.

8
Felix Scheffer

Je suis surpris que personne n'ait mentionné String.split () sans paramètre. N'est-ce pas ce pour quoi il est fait? un péché:

"abc def ghi".split()
2
Bill K

Puisqu'il s'agit d'une expression régulière, et je suppose que vous ne voudriez pas non plus de caractères non alphanumériques comme des virgules, des points, etc., qui pourraient être entourés par des blancs (par exemple, "un, deux" devrait donner [un] [deux]) CA devrait etre:

myString.split(/[\s\W]+/)
2
Rishabh
String str = "Hello   World";
String res[] = str.split("\\s+");
1
Olivia Liao

vous pouvez diviser une chaîne par un saut de ligne en utilisant l'instruction suivante:

 String textStr[] = yourString.split("\\r?\\n");

vous pouvez diviser une chaîne par un espace en utilisant l'instruction suivante:

String textStr[] = yourString.split("\\s+");
1
RajeshVijayakumar