Warum benötigt String.split einen Pipe-Begrenzer, der maskiert werden kann?

Ich versuche, eine Datei zu analysieren, bei der jede Zeile mit durch Pipe getrennten Werten versehen ist. Es funktionierte nicht richtig, wenn ich nicht das Pipe-Trennzeichen in der Split-Methode verlassen hatte, aber es funktionierte korrekt, nachdem ich die Pipe wie folgt verlassen hatte.

private ArrayList parseLine(String line) { ArrayList list = new ArrayList(); 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 jemand bitte erklären, warum das Pipe-Zeichen für die split() -Methode maskiert werden muss?

   

String.split erwartet ein Argument für reguläre Ausdrücke. Ein Unescaped | wird als Regex interpretiert, was “leere Zeichenfolge oder leere Zeichenfolge” bedeutet, was nicht gemeint ist.

Da die Syntax für diesen zu teilenden Parameter ein regulärer Ausdruck ist, wobei im ‘|’ hat eine spezielle Bedeutung von OR, und ein ‘\ |’ bedeutet ein Literal ‘|’ also die Zeichenfolge “\\ |” bedeutet der reguläre Ausdruck ‘\ |’ was bedeutet, dass genau das Zeichen ‘|’

Sie können dies einfach tun:

 String[] arrayString = yourString.split("\\|");