La documentación oficial de Java establece:
La cadena "boo:and:foo", por ejemplo, produce los siguientes resultados con estas expresiones Resultado de expresión regular:
{ "boo", "and", "foo" }"
Y así es como lo necesito para funcionar. 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?

Respuestas:
Necesitas
splitusa expresiones regulares y en regex|es un metacarácter que representa alORoperador. Necesitas escapar de ese personaje usando\(escrito en String"\\"ya\que también es un metacarácter en literales de String y requiere otro\para escapar de él).También puedes usar
y deja
Pattern.quotecrear la versión escapada de la representación de expresiones regulares|.fuente
split()método toma expresiones regulares y|es un personaje especial para el ex reg.Use el escape apropiado:
string.split("\\|")O, en Java 5+, use el ayudante
Pattern.quote()que se ha creado exactamente para este propósito:que funciona con cadenas de entrada arbitrarias. Muy útil cuando necesita citar / escapar la entrada del usuario.
fuente
Pattern.quote().Usa este código:
fuente
También puede usar la biblioteca apache y hacer esto:
fuente
También puedes usar
.split("[|]").(Usé esto en lugar de
.split("\\|"), lo que no funcionó para mí).fuente
Especificar un límite o un máximo será exacto para ejemplos como: "boo ||| a" o "|| boo |" o "|||"
Pero
test.split("\\|");devolverá diferentes series de cadenas de longitud para los mismos ejemplos.usar referencia: enlace
fuente
el método split () toma una expresión regular como argumento
fuente