split(delimiter)
de forma predeterminada, elimina las cadenas vacías finales de la matriz de resultados. Para desactivar este mecanismo, necesitamos usar una versión sobrecargada de split(delimiter, limit)
con limit
un valor negativo como
String[] split = data.split("\\|", -1);
Un poco más de detalles:
split(regex)
devuelve internamente el resultado split(regex, 0)
y la documentación de este método que puede encontrar (énfasis mío)
El limit
parámetro controla la cantidad de veces que se aplica el patrón y, por lo tanto, afecta la longitud de la matriz resultante.
Si el límite n
es mayor que cero , el patrón se aplicará como máximo n - 1 veces, la longitud de la matriz no será mayor que n, y la última entrada de la matriz contendrá todas las entradas más allá del último delimitador coincidente.
Si non
es positivo , el patrón se aplicará tantas veces como sea posible y la matriz puede tener cualquier longitud.
Si n
es cero , el patrón se aplicará tantas veces como sea posible, la matriz puede tener cualquier longitud y las cadenas vacías finales se descartarán .
excepción :
Vale la pena mencionar que eliminar la cadena vacía final tiene sentido solo si dichas cadenas vacías se crean mediante un mecanismo dividido . Entonces, "".split(anything)
dado que no podemos dividirnos ""
más, obtendremos como [""]
matriz de resultados .
Ocurre porque la división no ocurrió aquí, por lo que a ""
pesar de estar vacío y el final representa la cadena original , no la cadena vacía que se creó mediante el proceso de división.