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 limitvalor 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 limitparâmetro controla o número de vezes que o padrão é aplicado e, portanto, afeta o comprimento da matriz resultante.
Se o limite nfor 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 nfor 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.