Warum benötigt String.split einen Pipe-Begrenzer, der maskiert werden kann?
Ich versuche zu Parsen einer Datei, jede Zeile mit dem pipe-delimited-Werte.
Es hat nicht richtig funktioniert, wenn ich nicht die Flucht der pipe-Trennzeichen für split-Methode, aber es funktioniert einwandfrei, nachdem ich entging das Rohr als unten.
private ArrayList<String> parseLine(String line) {
ArrayList<String> list = new ArrayList<String>();
String[] list_str = line.split("\\|"); //note the escape "\\" here
System.out.println(list_str.length);
System.out.println(line);
for(String s:list_str) {
list.add(s);
System.out.print(s+ "|");
}
return list;
}
Kann mir bitte jemand erklären, warum das pipe-Zeichen muss maskiert werden, für die split()
Methode?
InformationsquelleAutor der Frage SK1 | 2012-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
String.split
erwartet einen regulären Ausdruck-argument. Ein unescaped|
wird analysiert, wie eine regex die Bedeutung "leere Zeichenfolge oder eine leere Zeichenkette," das ist nicht, was Sie bedeuten.InformationsquelleAutor der Antwort Louis Wasserman
Weil die syntax für diesen parameter zu split ist ein regulärer Ausdruck, wo in der '|' hat eine spezielle Bedeutung ODER ist, und a '\|' bedeutet, dass ein literal '|', so wird die Zeichenfolge "\\|" bezeichnet den regulären Ausdruck '\|', was bedeutet, dass exakt mit dem Zeichen '|'.
InformationsquelleAutor der Antwort dlamblin
Können Sie einfach, dies zu tun:
InformationsquelleAutor der Antwort Ravinath