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
split
usa expresiones regulares y en regex|
es un metacarácter que representa alOR
operador. 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.quote
crear 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