In der offiziellen Java-Dokumentation heißt es:
Die Zeichenfolge "boo:and:foo"
liefert beispielsweise mit diesen Ausdrücken das folgende Ergebnis: Regex-Ergebnis:
{ "boo", "and", "foo" }"
Und so muss es funktionieren. Wenn ich dies jedoch ausführe:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
es druckt:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Welches ist weit von dem, was ich erwarten würde:
>A<
>B<
>C<
><
>D<
Warum passiert dies?
Antworten:
Du brauchst
split
verwendet reguläre Ausdrücke und in Regex|
ist ein Metazeichen, das denOR
Operator darstellt. Sie müssen dieses Zeichen mit maskieren\
(in String geschrieben,"\\"
da\
es auch ein Metazeichen in String-Literalen ist und ein anderes Zeichen benötigt\
, um es zu maskieren).Sie können auch verwenden
und lassen Sie
Pattern.quote
die maskierte Version des regulären Ausdrucks erstellen|
.quelle
split()
Methode nimmt Regex und|
ist Sonderzeichen für reg exVerwenden Sie die richtige Flucht:
string.split("\\|")
Oder verwenden Sie in Java 5+ den Helfer,
Pattern.quote()
der genau für diesen Zweck erstellt wurde:Das funktioniert mit beliebigen Eingabezeichenfolgen. Sehr nützlich, wenn Sie Benutzereingaben zitieren / maskieren müssen.
quelle
Pattern.quote()
.Verwenden Sie diesen Code:
quelle
Sie können auch die Apache-Bibliothek verwenden und dies tun:
quelle
Sie können auch verwenden
.split("[|]")
.(Ich habe dies stattdessen verwendet
.split("\\|")
, was bei mir nicht funktioniert hat.)quelle
Die Angabe eines Grenzwerts oder eines Maximums ist für Beispiele wie "boo ||| a" oder "|| boo |" genau. oder "|||"
Aber
test.split("\\|");
jedoch Zeichenfolgenarrays unterschiedlicher Länge für dieselben Beispiele zurück.Referenz verwenden: Link
quelle
Die split () -Methode verwendet einen regulären Ausdruck als Argument
quelle