web-dev-qa-db-fra.com

Fractionner une chaîne avec plusieurs espaces

Je veux diviser une chaîne comme 

"first     middle  last" 

avec String.split(). Mais quand j'essaye de le scinder, je reçois 

String[] array = {"first","","","","middle","","last"}

J'ai essayé d'utiliser String.isEmpty() pour vérifier les chaînes vides après les avoir divisées, mais cela ne fonctionne pas sous Android. Voici mon code:

String s = "First  Middle Last";
String[] array = s.split(" ");
for(int i=0; i<array.length; i++) {
  //displays segmented strings here
}

Je pense qu'il y a un moyen de le diviser comme ceci: {"first","middle","last"} mais je ne peux pas comprendre comment.

Merci pour l'aide!

47
smarti02

Puisque l'argument de split() est une expression régulière , vous pouvez rechercher un ou plusieurs espaces (" +") au lieu d'un seul espace (" ").

String[] array = s.split(" +");
128
rid

essayez d'utiliser cette s.split("\\s+");

25
Anurag Ramdasan

si vous avez une ficelle comme 

String s = "This is a test string  This is the next part    This is the third part";

et veulent obtenir un tableau comme 

String[] sArray = { "This is a test string", "This is the next part", "This is the third part" }

tu devrais essayer 

String[] sArray = s.split("\\s{2,}");

La partie {2,} définit qu'au moins 2 et jusqu'à l'infini des espaces sont nécessaires pour que le fractionnement se produise.

8
Roman Vottner

Cela a fonctionné pour moi.

s.split(/\s+/)

var foo = "first     middle  last";

console.log(foo.split(/\s+/));

4
user5613691

Étant donné que split() utilise expressions régulières , vous pouvez utiliser quelque chose comme s.split("\\s+") pour définir le délimiteur de division sur un nombre quelconque de caractères d'espacement.

2
Russell Zahniser

Que diriez-vous d'utiliser quelque chose qui est fourni par le SDK Android.

TextUtils.split(stringToSplit, " +");
1
JaydeepW