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


Quel pattern regex devrai-je passer au java.lang.String.split() méthode pour diviser une chaîne en un tableau de sous-chaînes en utilisant tous les caractères espaces ('', '\ t', '\ n', etc.) comme délimiteurs?


502
2017-10-22 11:27


origine


Réponses:


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 chaîne:

"Hello[space][tab]World"

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

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

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


892
2017-10-22 11:31



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 souvenirs:

\w - Correspond à n'importe quel mot.

\W - Correspond à n'importe quel caractère non-mot.

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

\S - Correspond à tout sauf aux caractères blancs.

\d - Correspond à n'importe quel chiffre.

\D - Correspond à n'importe quoi sauf les chiffres.

Une recherche de "Regex Cheatsheets" devrait vous récompenser avec un tas de résumés utiles.


79
2017-10-22 11:30



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

myString.split(/\s+/g)

56
2018-03-01 22:18



"\\ s +" devrait faire l'affaire


35
2017-10-22 11:29



Vous pouvez également avoir un espace UniCode insécable xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

9
2017-09-09 03:29



String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

9
2018-03-31 18:14



Apache Commons Lang a une méthode pour diviser une chaîne avec des caractères d'espace comme 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 peut être plus facile à utiliser qu'un motif regex.


8
2017-12-01 17:10



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

myString.split(/[\s\W]+/)

2
2018-02-14 09:01



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

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

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

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

1
2017-09-01 13:40