Je souhaite diviser ",,,"
en un tableau de 4 en ""
utilisant leString.split()
Voici mon code:
String str = ",,,";
String[] tokens = str.split(",");
Cependant, les jetons de résultat étaient un tableau vide: [], plutôt qu'un tableau de 4 ""
(["","","",""])
comme je le voulais.
J'ai testé pour changer str
un peu le:
String str = ",,,1";
String[] tokens = str.split(",");
Cette fois, les jetons de résultat étaient ["","","","1"]
. C'est proche de ce que je veux, mais je ne veux vraiment pas ajouter ce "1" avant de faire le split.
Le problème est fondamentalement, le String.split()
retournera un tableau vide s'il ne contient que des éléments vides ""
.
Pouvez-vous aider à résoudre le problème?
Vous devez utiliser la String#split(regex, limit)
méthode surchargée qui prend le paramètre limit.
String[] tokens = str.split(",", -1);
De la documentation (c'est moi qui souligne):
Le paramètre limit contrôle le nombre de fois que le motif est appliqué et affecte donc la longueur du tableau résultant. Si la limite n est supérieure à zéro, le motif sera appliqué au plus n - 1 fois, la longueur du tableau ne sera pas supérieure à n et la dernière entrée du tableau contiendra toutes les entrées au-delà du dernier délimiteur correspondant. Si n n'est pas positif, le motif sera appliqué autant de fois que possible et le tableau peut avoir n'importe quelle longueur. Si n est zéro, le motif sera appliqué autant de fois que possible, le tableau peut avoir n'importe quelle longueur et les chaînes vides de fin seront rejetées.
Explication: Lorsque vous ne fournissez pas l'argument limit ou n'indiquez "zéro" comme limite, les split()
zones vides de fin sont ignorées. Lorsque vous fournissez un argument de limite positive, il limite le nombre de champs à cette limite particulière. Mais lorsque vous fournissez une limite négative, la split()
méthode autorise n'importe quel nombre de champs et ne supprime pas non plus les champs vides de fin. Pour être plus clair, jetez un œil au code source de celui Pattern#split(regex, limit)
qui a cet extrait à la fin (des commentaires ont été ajoutés par moi et n'étaient pas présents dans le code source réel).
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
Remarque: Si vous ne fournissez aucun argument limit, la split()
méthode sans argument limit appelle la split()
méthode surchargée comme celle-ci .
public String[] split(String regex) {
return split(regex, 0);
}
Et notez également que, String#split(regex, limit)
appelle en interne le Pattern#split(regex, limit)
.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots