web-dev-qa-db-fra.com

Java split () supprime les chaînes vides à la fin?

Découvrez le programme ci-dessous.

try {
    for (String data : Files.readAllLines(Paths.get("D:/sample.txt"))){
        String[] de = data.split(";");
        System.out.println("Length = " + de.length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Sample.txt:

 1; 2; 3; 4 
 A; B ;; 
 A; b; c; 

Sortie:

 Longueur = 4 
 Longueur = 2 
 Longueur = 3 

Pourquoi les deuxième et troisième sorties donnent 2 et 3 au lieu de 4. Dans sample.txt fichier, la condition pour la 2ème et la 3ème ligne doit donner une nouvelle ligne (\n ou entrez) immédiatement après avoir délimité le troisième champ. Quelqu'un peut-il m'aider à obtenir une longueur de 4 pour les 2e et 3e lignes sans changer la condition du sample.txt fichier et comment imprimer les valeurs de de[2] (jette ArrayIndexOutOfBoundsException)?

112
raja

Vous pouvez spécifier d'appliquer le motif le plus souvent possible avec:

String[] de = data.split(";", -1);

Voir Javadoc pour la méthode de partage prenant deux arguments pour plus de détails.

280
Fabian Steeg

jetez un oeil à la docs , voici la citation importante:

[...] the array can have any length, and trailing empty strings will be discarded.

Si vous n'aimez pas cela, jetez un œil au commentaire de Fabian. Lors de l'appel de String.split(String), il appelle String.split(String, 0) et cela supprime les chaînes vides de fin (comme le disent les docs), lors de l'appel de String.split(String, n) avec n < 0 ne jettera rien.

23
Johannes Weiss