Perché String.split necessita del delimitatore di pipe per essere sfuggito?

Sto cercando di analizzare un file che ha ciascuna riga con valori delimitati da pipe. Non ha funzionato correttamente quando non ho scappato dal delimitatore del tubo nel metodo split, ma ha funzionato correttamente dopo che ho sfuggito alla pipe come di seguito.

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

Qualcuno può spiegare perché il personaggio del pipe deve essere scappato per il metodo split() ?

String.split aspetta un argomento di espressione regolare. Un indiscusso | viene analizzato come regex che significa “stringa vuota o stringa vuota”, che non è ciò che intendi.

Perché la syntax per il parametro da suddividere è un’espressione regolare, dove nel ‘|’ ha un significato speciale di OR e un ‘\ |’ significa letterale ‘|’ quindi la stringa “\\ |” significa l’espressione regolare ‘\ |’ il che significa che corrisponde esattamente al carattere ‘|’.

Puoi semplicemente fare questo:

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