java - Cómo dividir una cadena delimitada por comas en una matriz de cadenas vacías
string split (1)
Debe usar el método sobrecargado String#split(regex, limit)
que toma el parámetro limit.
String[] tokens = str.split(",", -1);
De los documentos (énfasis mío):
El parámetro límite controla el número 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á toda la entrada más allá del último delimitador coincidente. Si n no 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.
Explicación: cuando no proporciona el argumento límite o no proporciona "cero" como límite, la split()
descarta los campos vacíos que se arrastran. Cuando proporciona un argumento de límite positivo, limita el número de campos a ese límite en particular. Pero cuando proporciona un límite negativo, el método split()
permite cualquier número de campos y no descartar los campos vacíos finales. Para que quede más claro, eche un vistazo al código fuente de la Pattern#split(regex, limit)
que tiene este fragmento de código al final (los comentarios fueron agregados por mí y no estaban presentes en el código fuente real).
if (limit == 0) // When zero or no arg is given
while (resultSize > 0 && matchList.get(resultSize-1).equals("")) // if trailing entries are blank
resultSize--; // remove them out
Nota: Si no proporciona ningún argumento límite, el método split()
sin argumento límite llama al método split()
sobrecargado de esta manera .
public String[] split(String regex) {
return split(regex, 0);
}
Y también tenga en cuenta que, String#split(regex, limit)
llama internamente al Pattern#split(regex, limit)
.
Quiero dividir ",,,"
en una matriz de 4 ""
usando String.split()
Aquí está mi código:
String str = ",,,";
String[] tokens = str.split(",");
Sin embargo, los tokens resultantes eran una matriz vacía: [], en lugar de una matriz de 4 ""
(["","","",""])
como quería.
He probado para cambiar el str
un poco:
String str = ",,,1";
String[] tokens = str.split(",");
Esta vez los tokens de resultados fueron ["","","","1"]
. Esto está cerca de lo que quiero, pero realmente no quiero agregar este "1" antes de hacer la división.
El problema es básicamente que String.split()
devolverá una matriz vacía si contiene solo elementos vacíos ""
.
¿Puedes ayudar a resolver el problema?