Dividir una cadena Java por el símbolo de tubería usando split("|")

Resuelto bluehallu asked hace 12 años • 7 respuestas

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?

bluehallu avatar May 29 '12 16:05 bluehallu
Aceptado

Necesitas

test.split("\\|");

splitusa expresiones regulares y en expresiones regulares | es un metacarácter que representa al ORoperador. 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.quotecrear la versión de escape de la expresión regular que representa |.

Jigar Joshi avatar May 29 '2012 09:05 Jigar Joshi

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.

Aaron Digulla avatar Jan 09 '2014 16:01 Aaron Digulla

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 + "<");
    }
}
berliandi avatar Sep 01 '2016 08:09 berliandi