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.¿Por qué String.split necesita el delimitador de tuberías para escaparse?
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;
}
Por favor alguien puede explicar por qué el carácter de canalización necesita ser escapado para el método split()
?
Las respuestas a continuación respondieron al "por qué", pero lo digo, si usted está tratando de coincidir con una cadena literal también se podría hacer en [Pattern.quote] (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#quote(java.lang.String)). Toma una 'Cadena' y devuelve una 'Cadena' regex que coincidirá con la entrada (es decir, se encarga de todo el escape para usted). – yshavit
+1 para 'Pattern.quote' – redDevil