A documentação oficial do Java declara:
A sequência "boo:and:foo"
, por exemplo, produz os seguintes resultados com essas expressões Regex Result:
{ "boo", "and", "foo" }"
E é assim que eu preciso para funcionar. No entanto, se eu executar isso:
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<
O que está longe do que eu esperaria:
>A<
>B<
>C<
><
>D<
Por que isso está acontecendo?
Respostas:
Você precisa
split
usa expressão regular e em regex|
é um metacaractere representando oOR
operador. Você precisa escapar desse caractere usando\
(escrito em String,"\\"
pois\
também é um metacaractere em literais de String e exige que outro\
escape).Você também pode usar
e vamos
Pattern.quote
criar a versão de escape da expressão regular que representa|
.fonte
split()
método leva regex e|
é o caráter especial para reg exUse escape apropriado:
string.split("\\|")
Ou, no Java 5+, use o auxiliar
Pattern.quote()
que foi criado exatamente para esse fim:que funciona com cadeias de entrada arbitrárias. Muito útil quando você precisa citar / escapar da entrada do usuário.
fonte
Pattern.quote()
.Use este código:
fonte
Você também pode usar a biblioteca apache e fazer o seguinte:
fonte
Você também pode usar
.split("[|]")
.(Usei isso em vez de
.split("\\|")
, o que não funcionou para mim.)fonte
A especificação de um limite ou máximo será precisa para exemplos como: "boo ||| a" ou "|| boo |" ou "|||"
Mas
test.split("\\|");
retornará matrizes de cadeias de comprimento diferentes para os mesmos exemplos.usar referência: link
fonte
o método split () usa uma expressão regular como argumento
fonte