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?
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]
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.
Pour que cela fonctionne en Javascript, je devais faire ce qui suit:
myString.split(/\s+/g)
"\\ s +" devrait faire l'affaire
Aussi, vous pouvez avoir un espace insécable UniCode xA0 ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
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")
Cela pourrait être plus facile à utiliser qu'un motif regex.
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()
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]+/)
String str = "Hello World";
String res[] = str.split("\\s+");
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+");