Ich muss meinen String durch Leerzeichen trennen. Dafür habe ich versucht:
str = "Hello I'm your String";
String[] splited = str.split(" ");
Aber es scheint nicht zu funktionieren.
Ich muss meinen String durch Leerzeichen trennen. Dafür habe ich versucht:
str = "Hello I'm your String";
String[] splited = str.split(" ");
Aber es scheint nicht zu funktionieren.
Was Sie haben, sollte funktionieren. Wenn jedoch die angegebenen Leerzeichen standardmäßig für... etwas anderes stehen? Sie können den Whitespace Regex verwenden:
str = "Hello I'm your String";
String[] splited = str.split("\\s+");
Dies führt dazu, dass eine beliebige Anzahl von aufeinanderfolgenden Leerzeichen die Zeichenfolge in Token aufteilt.
Die akzeptierte Antwort ist zwar gut, aber beachten Sie, dass Sie einen führenden leeren String erhalten, wenn Ihr Eingabe-String mit einem Leerzeichen beginnt. Zum Beispiel mit:
String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");
Das Ergebnis wird sein:
splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";
Es empfiehlt sich also, die Schnur zu trimmen, bevor sie geteilt wird:
String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");
[Bearbeiten]
Zusätzlich zu den trim
können Sie das Unicode-Leerzeichen ohne Umbruch ( U+00A0
). Dieses Zeichen wird wie ein normales Leerzeichen in einer Zeichenkette gedruckt und lauert oft in kopiertem Text aus Rich-Text-Editoren oder Webseiten. Sie werden nicht behandelt von .trim()
die auf zu entfernende Zeichen prüft, indem sie c <= ' '
; \s
wird sie auch nicht fangen.
Stattdessen können Sie Folgendes verwenden \p{Blank}
aber Sie müssen auch die Unterstützung von Unicode-Zeichen aktivieren, die das reguläre split
nicht ausreicht. Zum Beispiel wird dies funktionieren: Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)
aber es wird nicht die trim
Teil.
Im Folgenden wird das Problem dargestellt und eine Lösung angeboten. Es ist weit von optimal auf regex für diese verlassen, aber jetzt, dass Java 8bit / 16bit Byte-Darstellung hat, wird eine effiziente Lösung für diese ziemlich lang.
public class SplitStringTest
{
static final Pattern TRIM_UNICODE_PATTERN = Pattern.compile("^\\p{Blank}*(.*)\\p{Blank}$", UNICODE_CHARACTER_CLASS);
static final Pattern SPLIT_SPACE_UNICODE_PATTERN = Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS);
public static String[] 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/grouping
return SPLIT_SPACE_UNICODE_PATTERN.split(trimMatcher.group(1));
}
@Test
void 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("][")) + "]");
}
}
Ergebnisse in:
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]
Utilice Stringutils.split()
um die Zeichenkette durch Weiße Schritte zu teilen. Zum Beispiel StringUtils.split("Hello World")
gibt "Hallo" und "Welt" zurück;
Um den genannten Fall zu lösen, verwenden wir die Split-Methode wie folgt
String split[]= StringUtils.split("Hello I'm your String");
Wenn wir das geteilte Array ausdrucken, lautet die Ausgabe :
Hallo
Ich bin
Ihr
Zeichenfolge
Pruebe
String[] splited = str.split("\\s");
http://download.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.