@BasilBourque - Je n'ai trouvé aucun bouton d'exécution sur ce lien
nanosoft
1
@nanosoft La page d'IdeOne.com s'exécute automatiquement lors du chargement. Voir la sortie sous le code, dans la section stdout . Pour modifier le code, cliquez sur le forklien dans le coin supérieur gauche.
Ce que vous avez devrait fonctionner. Si, cependant, les espaces fournis sont par défaut à ... autre chose? Vous pouvez utiliser l'expression rationnelle des espaces blancs:
str ="Hello I'm your String";String[] splited = str.split("\\s+");
Cela entraînera un nombre illimité d'espaces consécutifs pour diviser votre chaîne en jetons.
En passant, je ne suis pas sûr que «divisé» soit un mot :) Je crois que l'état d'être victime d'une scission est également «scindé». C'est une de ces choses grammaticales délicates :-) N'essayant pas d'être pointilleux, je me suis dit que je le transmettrais!
Je suis suisse à quoi vous attendiez-vous, mon anglais n'est pas le meilleur; P, de toute façon ça a fonctionné!
safari du
29
:-) Hé ce n'est pas grand. J'ai utilisé des noms de variables ridicules (dans du code que je n'aurais probablement pas dû laisser aller en direct!) Je n'essayais pas d'être un grammaire nazi ou quoi que ce soit, juste en passant un petit anecdote, c'est tout.
corsiKa
7
@Safari, vous venez de recevoir 2 bons conseils au prix de 1. je plaisante. Très bonne réponse.
Nirmal Mangal
8
"Ce que vous avez devrait fonctionner" je dis quelque chose de similaire assez souvent lorsque mon code casse.
Griffin
1
Je trouve cela utile car mon cas d'utilisation était de diviser la chaîne et de supprimer plusieurs espaces. Une ligne de code fait les deux pour moi.
Niharika Upadhyay
87
Bien que la réponse acceptée soit bonne, sachez que vous vous retrouverez avec une chaîne vide de début si votre chaîne d'entrée commence par un espace blanc. Par exemple, avec:
String str =" Hello I'm your String";String[] splitStr = str.split("\\s+");
Donc, vous voudrez peut-être couper votre chaîne avant de la diviser:
String str =" Hello I'm your String";String[] splitStr = str.trim().split("\\s+");
[Éditer]
En plus de la trimmise en garde, vous voudrez peut-être considérer le caractère d'espace insécable unicode ( U+00A0). Ce caractère s'imprime comme un espace régulier dans une chaîne et se cache souvent dans du texte copié-collé à partir d'éditeurs de texte enrichi ou de pages Web. Ils ne sont pas gérés par .trim()quels tests les caractères doivent être supprimés en utilisant c <= ' '; \sne les attrapera pas non plus.
Au lieu de cela, vous pouvez utiliser \p{Blank}mais vous devez également activer la prise en charge des caractères Unicode, ce que le normal splitne fera pas. Par exemple, cela fonctionnera: Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)mais cela ne fera pas la trimpartie.
Ce qui suit illustre le problème et fournit une solution. Il est loin d'être optimal de s'appuyer sur l'expression régulière pour cela, mais maintenant que Java a une représentation d'octets 8 bits / 16 bits, une solution efficace pour cela devient assez longue.
publicclassSplitStringTest{staticfinalPattern TRIM_UNICODE_PATTERN =Pattern.compile("^\\p{Blank}*(.*)\\p{Blank}$", UNICODE_CHARACTER_CLASS);staticfinalPattern SPLIT_SPACE_UNICODE_PATTERN =Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS);publicstaticString[] trimSplitUnicodeBySpace(String str){Matcher trimMatcher = TRIM_UNICODE_PATTERN.matcher(str);boolean ignore = trimMatcher.matches();// always true but must be called since it does the actual matching/groupingreturn SPLIT_SPACE_UNICODE_PATTERN.split(trimMatcher.group(1));}@Testvoid test(){String words =" Hello I'm\u00A0your String\u00A0";// non-breaking space here --^ and there -----^String[] split = words.split(" ");String[] trimAndSplit = words.trim().split(" ");String[] splitUnicode = SPLIT_SPACE_UNICODE_PATTERN.split(words);String[] trimAndSplitUnicode = trimSplitUnicodeBySpace(words);System.out.println("words: ["+ words +"]");System.out.println("split: ["+Arrays.stream(split).collect(Collectors.joining("]["))+"]");System.out.println("trimAndSplit: ["+Arrays.stream(trimAndSplit).collect(Collectors.joining("]["))+"]");System.out.println("splitUnicode: ["+Arrays.stream(splitUnicode).collect(Collectors.joining("]["))+"]");System.out.println("trimAndSplitUnicode: ["+Arrays.stream(trimAndSplitUnicode).collect(Collectors.joining("]["))+"]");}}
Résulte en:
words:[Hello I'm your String]
split:[][Hello][I'm your][String]
trimAndSplit:[Hello][I'm your][String]
splitUnicode:[][Hello][I'm][your][String]
trimAndSplitUnicode:[Hello][I'm][your][String]
Je crois que mettre une expression régulière entre les parenthèses str.split devrait résoudre le problème. La méthode Java String.split () est basée sur des expressions régulières donc ce dont vous avez besoin est:
str ="Hello I'm your String";String[] splitStr = str.split("\\s+");
Il existe une possibilité de lever l'exception ArrayIndexOutofBounds.
Ajay Takur
2
Non, cela ne lancera pas "ArrayIndexOutofBounds" car j'ai déclaré la taille du tableau en fonction du nombre de jetons trouvés dans String. cela garantira que la taille des tableaux ne sera pas supérieure aux jetons reçus dans une chaîne.
import java.util.regex.Pattern;...privatestaticfinalPattern SPACE =Pattern.compile(" ");String[] arr = SPACE.split(str);// str is the string to be split
Cela replaceAll("^\\s+","")m'a sauvé la journée. Cela a fonctionné pour mon cas. Merci
Kostas Asargiotakis
2
Exemple très simple ci-dessous:
J'espère que ça aide.
String str ="Hello I'm your String";String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0];//Hello
var splited2=splited[1];//I'm
var splited3=splited[2];//your
var splited4=splited[3];//String
Vous avez maintenant une liste de chaînes (ce qui est sans doute meilleur qu'un tableau); si vous avez besoin d'un tableau, vous pouvez le faireoutput.toArray(new String[0]);
fork
lien dans le coin supérieur gauche.Réponses:
Ce que vous avez devrait fonctionner. Si, cependant, les espaces fournis sont par défaut à ... autre chose? Vous pouvez utiliser l'expression rationnelle des espaces blancs:
Cela entraînera un nombre illimité d'espaces consécutifs pour diviser votre chaîne en jetons.
En passant, je ne suis pas sûr que «divisé» soit un mot :) Je crois que l'état d'être victime d'une scission est également «scindé». C'est une de ces choses grammaticales délicates :-) N'essayant pas d'être pointilleux, je me suis dit que je le transmettrais!
la source
Bien que la réponse acceptée soit bonne, sachez que vous vous retrouverez avec une chaîne vide de début si votre chaîne d'entrée commence par un espace blanc. Par exemple, avec:
Le résultat sera:
Donc, vous voudrez peut-être couper votre chaîne avant de la diviser:
[Éditer]
En plus de la
trim
mise en garde, vous voudrez peut-être considérer le caractère d'espace insécable unicode (U+00A0
). Ce caractère s'imprime comme un espace régulier dans une chaîne et se cache souvent dans du texte copié-collé à partir d'éditeurs de texte enrichi ou de pages Web. Ils ne sont pas gérés par.trim()
quels tests les caractères doivent être supprimés en utilisantc <= ' '
;\s
ne les attrapera pas non plus.Au lieu de cela, vous pouvez utiliser
\p{Blank}
mais vous devez également activer la prise en charge des caractères Unicode, ce que le normalsplit
ne fera pas. Par exemple, cela fonctionnera:Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)
mais cela ne fera pas latrim
partie.Ce qui suit illustre le problème et fournit une solution. Il est loin d'être optimal de s'appuyer sur l'expression régulière pour cela, mais maintenant que Java a une représentation d'octets 8 bits / 16 bits, une solution efficace pour cela devient assez longue.
Résulte en:
la source
Je crois que mettre une expression régulière entre les parenthèses str.split devrait résoudre le problème. La méthode Java String.split () est basée sur des expressions régulières donc ce dont vous avez besoin est:
la source
Utilisez
Stringutils.split()
pour diviser la chaîne par des blancs. Par exempleStringUtils.split("Hello World")
renvoie "Bonjour" et "Monde";Afin de résoudre le cas mentionné, nous utilisons une méthode de partage comme celle-ci
lorsque nous imprimons le tableau divisé, la sortie sera:
Bonjour
je suis
votre
Chaîne
Pour un exemple complet de démonstration, cliquez ici
la source
Essayer
http://download.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
la source
si vous ne voulez pas utiliser la méthode de partage de chaîne, vous pouvez utiliser la classe StringTokenizer en Java comme ..
la source
Essaye celui-là
la source
Une autre solution serait:
Je l'ai vu ici
la source
OK, nous devons donc faire le fractionnement car vous avez déjà obtenu la réponse, je la généraliserais.
Si vous souhaitez diviser une chaîne par des espaces, délimitez (caractères spéciaux).
Tout d'abord, supprimez l'espace de tête car ils créent la plupart des problèmes.
Retirez d'abord l'espace de tête qui peut être de l'espace, des tabulations, etc.
Maintenant, si vous voulez diviser par espace ou par n'importe quel caractère spécial.
Mais comme w contient [a-zA-Z_0-9], donc si vous voulez diviser par un trait de soulignement (_), utilisez également
la source
replaceAll("^\\s+","")
m'a sauvé la journée. Cela a fonctionné pour mon cas. MerciExemple très simple ci-dessous:
J'espère que ça aide.
la source
vous pouvez réduire la chaîne en utilisant le code ci-dessous
la source
Voici une méthode pour couper une chaîne qui a un espace "," ou blanc
la source
Comme cela fait un moment que ces réponses n'ont pas été publiées, voici une autre façon plus actuelle de faire ce qui est demandé:
Vous avez maintenant une liste de chaînes (ce qui est sans doute meilleur qu'un tableau); si vous avez besoin d'un tableau, vous pouvez le faire
output.toArray(new String[0]);
la source
Non seulement l'espace blanc, mais ma solution résout également les caractères invisibles.
la source
Chaîne simple à cracher par espace
la source