Dividindo uma String Java pelo símbolo pipe usando split (“|”)

A documentação oficial do Java declara:

A string "boo:and:foo" , por exemplo, produz os seguintes resultados com essas expressões Regex Result:

 { "boo", "and", "foo" }" 

E é assim que preciso que funcione. 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:

 >ABCD< 

Por que isso está acontecendo?

Você precisa

 test.split("\\|"); 

split usa expressão regular e em regex | é um metacaractere que representa o operador OR . Você precisa escaping desse caractere usando \ (escrito em String como "\\" já que \ também é um meta-caractere em literais String e requer outro \ para escaping).

Você também pode usar

 test.split(Pattern.quote("|")); 

e deixe Pattern.quote criar a versão com escape do regex representando | .

Use o escape adequado: string.split("\\|")

Ou o helper Pattern.quote() que foi criado exatamente para esse propósito:

 string.split(Pattern.quote("|")) 

que trabalha com strings de input arbitrárias. Muito útil quando você precisa citar / fugir da input do usuário.

Use 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 + "<"); } } 

Você também pode usar a biblioteca do Apache e fazer isso:

 StringUtils.split(test, "|"); 

Você também pode usar .split("[|]") .

(Eu usei isso em vez de .split("\\|") , o que não funcionou para mim.)

o método split () usa uma expressão regular como argumento