Pourquoi Ssortingng.split a-t-il besoin d’écarter le délimiteur de conduite?

J’essaie d’parsingr un fichier qui a chaque ligne avec des valeurs délimitées par un tuyau. Cela n’a pas fonctionné correctement quand je n’ai pas échappé au délimiteur de pipe en méthode split, mais cela a fonctionné correctement après que j’ai échappé le tuyau comme ci-dessous.

private ArrayList parseLine(Ssortingng line) { ArrayList list = new ArrayList(); Ssortingng[] list_str = line.split("\\|"); // note the escape "\\" here System.out.println(list_str.length); System.out.println(line); for(Ssortingng s:list_str) { list.add(s); System.out.print(s+ "|"); } return list; } 

Quelqu’un peut-il s’il vous plaît expliquer pourquoi le caractère de tuyau doit être échappé pour la méthode split() ?

Ssortingng.split attend un argument d’expression régulière. Un non échappé | est analysé comme une regex signifiant “chaîne vide ou chaîne vide”, ce qui n’est pas ce que vous voulez dire.

Parce que la syntaxe de ce paramètre à séparer est une expression régulière, dans laquelle a une signification particulière de OR et un ‘\ |’ signifie un littéral ‘|’ donc la chaîne “\\ |” signifie l’expression régulière ‘\ |’ ce qui signifie que correspond exactement au caractère ‘|’.

Vous pouvez simplement faire ceci:

 Ssortingng[] arraySsortingng = yourSsortingng.split("\\|");