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 limitun 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 limitpará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 nes 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 nes 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.