383 votes

Comment séparer une chaîne de caractères par un espace

J'ai besoin de diviser ma chaîne par des espaces. Pour cela, j'ai essayé :

str = "Hello I'm your String";
String[] splited = str.split(" ");

Mais ça ne semble pas fonctionner.

5 votes

C'est bien... quelles sont les valeurs dans le tableau 'splited' ?

2 votes

Votre code fonctionne en effet tel quel. Voir code exécuté en direct sur IdeOne.com .

0 votes

@BasilBourque - Je n'ai pas trouvé de bouton "run" sur ce lien.

729voto

corsiKa Points 39442

Ce que vous avez devrait fonctionner. Si, toutefois, les espaces fournis se transforment par défaut en... autre chose ? Vous pouvez utiliser la regex des espaces blancs :

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Ainsi, un nombre quelconque d'espaces consécutifs divisera votre chaîne de caractères en jetons.

En passant, je ne suis pas sûr que "divisé" soit un mot :) Je crois que l'état d'être victime d'un split est aussi "split". C'est une de ces choses délicates en grammaire :-) Je n'essaie pas de faire la fine bouche, je me suis juste dit que je devais le faire savoir !

31 votes

:-) Hé, ce n'est pas grave. J'ai utilisé des noms de variables ridicules (dans un code que je n'aurais probablement pas dû laisser vivre !) Je n'essayais pas d'être un nazi de la grammaire ou quoi que ce soit, je passais juste un petit détail, c'est tout.

0 votes

Quelle expression régulière utiliser si nous devons diviser sur ces espaces , + - / ;

0 votes

Je n'en suis pas sûr au premier abord. S'il s'agit uniquement d'espace, vous pouvez former votre propre classe en la mettant entre parenthèses, donc dans votre cas probablement (attention, ceci n'est pas testé) [ +\\-/;]+ - remarquer le \` around the -` pour y échapper. Maintenant, cela correspondra probablement This is+a+ - + - + - test en 4 jetons, ce qui peut être souhaité ou non. Le vrai problème est que vous ne pouvez pas utiliser \\s pour correspondre à "tout espace blanc". Vous feriez mieux de ne pas utiliser split, et d'utiliser simplement Matcher m = Pattern.compile("([A-Za-z0-9]+)").matcher(text); while(m.find()) list.add(m.group(1)); pour récupérer les mots au lieu de diviser un grand texte.

30voto

Robert L. Points 160

Je pense que le fait de placer une expression régulière dans les parenthèses de str.split devrait résoudre le problème. La méthode Java String.split() est basée sur des expressions régulières, ce dont vous avez besoin :

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");

14voto

user3041354 Points 93

Utilisez Stringutils.split() pour diviser la chaîne par des pas blancs. Par exemple StringUtils.split("Hello World") renvoie "Hello" et "World" ;

Afin de résoudre le cas mentionné, nous utilisons la méthode de fractionnement comme suit

String split[]= StringUtils.split("Hello I'm your String");

lorsque nous imprimons le tableau divisé, la sortie sera :

Bonjour

Je suis

votre

Chaîne de caractères

Pour un exemple complet de démonstration, cliquez ici

10voto

Vladimir Points 4310

8voto

sallu Points 210

Si d'une manière ou d'une autre vous ne voulez pas utiliser la méthode de division de la chaîne, vous pouvez utiliser la classe StringTokenizer en Java comme

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }

0 votes

Il existe une possibilité de lancer l'exception ArrayIndexOutofBounds.

3 votes

Non, cela ne lancera pas "ArrayIndexOutofBounds" parce que j'ai déclaré la taille du tableau en fonction du nombre de tokens trouvés dans la chaîne. Cela permettra de s'assurer que la taille du tableau ne sera pas plus grande que les tokens reçus dans une chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X