¿Por qué String.split necesita delimitador de tubería para escaparse?

Estoy tratando de analizar un archivo que tiene cada línea con valores delimitados por tuberías. No funcionó correctamente cuando no escapé del delimitador de tubería en el método de división, pero funcionó correctamente después de que escapé de la tubería como se muestra a continuación.

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; } 

¿Puede alguien explicar por qué el carácter de la tubería debe escaparse para el método split() ?

String.split espera un argumento de expresión regular. Unescaped | se analiza como una expresión regular que significa “cadena vacía o cadena vacía”, que no es lo que quieres decir.

Debido a que la syntax de ese parámetro para dividir es una expresión regular, donde en el ‘|’ tiene un significado especial de O, y un ‘\ |’ significa un literal ‘|’ entonces la cadena “\\ |” significa la expresión regular ‘\ |’ lo que significa que coincide exactamente con el carácter ‘|’.

Simplemente puede hacer esto:

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