split(delimiter)
por padrão, remove seqüências de caracteres vazias à direita da matriz de resultados. Para desativar esse mecanismo, precisamos usar a versão sobrecarregada de split(delimiter, limit)
com limit
valor negativo como
String[] split = data.split("\\|", -1);
Um pouco mais de detalhes:
split(regex)
retorna internamente o resultado de split(regex, 0)
e na documentação deste método você encontra (ênfase minha)
O limit
parâmetro controla o número de vezes que o padrão é aplicado e, portanto, afeta o comprimento da matriz resultante.
Se o limite n
for maior que zero , o padrão será aplicado no máximo n - 1 vezes, o comprimento da matriz não será maior que n e a última entrada da matriz conterá toda a entrada além do último delimitador correspondente.
Se nãon
for positivo , o padrão será aplicado quantas vezes for possível e a matriz pode ter qualquer comprimento.
Se n
for zero , o padrão será aplicado quantas vezes for possível, a matriz pode ter qualquer comprimento e as seqüências vazias à direita serão descartadas .
Exceção :
Vale ressaltar que remover a seqüência vazia à direita só faz sentido se essas seqüências vazias forem criadas pelo mecanismo de divisão . Então, "".split(anything)
como não podemos dividir ""
mais, obteremos como [""]
matriz de resultados .
Isso acontece porque a divisão não aconteceu aqui, portanto, ""
apesar de estar vazio e à direita, representa a sequência original , não a sequência vazia que foi criada pelo processo de divisão.