J'essaie d'analyser un fichier dont chaque ligne contient des valeurs délimitées par des tubes. Cela n'a pas fonctionné correctement lorsque je n'ai pas échappé le délimiteur pipe dans la méthode split, mais cela a fonctionné correctement après avoir échappé le pipe comme 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 m'expliquer pourquoi le caractère pipe doit être échappé pour la fonction split()
méthode ?
13 votes
Les réponses ci-dessous ont répondu au "pourquoi", mais pour votre information, si vous essayez de faire correspondre une chaîne de caractères littérale, vous pouvez également consulter la page suivante Pattern.quote . Il faut un
String
et renvoie une regexString
qui correspondra à l'entrée (c'est-à-dire qu'il s'occupe de tout l'échappement pour vous).0 votes
+1 pour
Pattern.quote