Dividir una cadena Java por el símbolo de tubería usando split("|")
La documentación oficial de Java dice:
La cadena "boo:and:foo"
, por ejemplo, produce los siguientes resultados con estas expresiones Regex Result:
{ "boo", "and", "foo" }"
Y así es como necesito que funcione. Sin embargo, si ejecuto esto:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
imprime:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Lo cual está lejos de lo que esperaría:
>A<
>B<
>C<
><
>D<
¿Por qué está pasando esto?
Necesitas
test.split("\\|");
split
usa expresiones regulares y en expresiones regulares |
es un metacarácter que representa al OR
operador. Debe escapar de ese carácter usando \
(escrito en String ya que "\\"
since \
también es un metacarácter en literales de String y requiere otro \
para escapar de él).
También puedes usar
test.split(Pattern.quote("|"));
y dejemos Pattern.quote
crear la versión de escape de la expresión regular que representa |
.
Utilice un escape adecuado:string.split("\\|")
O, en Java 5+, utilice el asistente Pattern.quote()
que se ha creado exactamente para este propósito:
string.split(Pattern.quote("|"))
que funciona con cadenas de entrada arbitrarias. Muy útil cuando necesitas citar/escapar de la entrada del usuario.
Utilice este código:
public static void main(String[] args) {
String test = "A|B|C||D";
String[] result = test.split("\\|");
for (String s : result) {
System.out.println(">" + s + "<");
}
}