J'essaie d'analyser un fichier comportant chaque ligne avec des valeurs délimitées par un canal. Cela ne fonctionnait pas correctement lorsque je n'échappais pas au délimiteur de tuyau dans la méthode split, mais cela fonctionnait correctement après avoir échappé le tuyau comme indiqué ci-dessous.
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;
}
Quelqu'un peut-il s'il vous plaît expliquer pourquoi le caractère de pipe doit être échappé pour la méthode split()
?
String.split
attend un argument d'expression régulière. Un échappé |
est analysé comme une expression rationnelle signifiant "chaîne vide ou chaîne vide", ce qui n'est pas ce que vous voulez dire.
Parce que la syntaxe pour ce paramètre à split est une expression régulière, où dans le '|' a une signification particulière de OU et un '\ |' signifie un '|' littéral donc la chaîne "\\ |" signifie l'expression régulière '\ |' ce qui signifie correspondre exactement au caractère '|'.
Vous pouvez simplement faire ceci:
String[] arrayString = yourString.split("\\|");