114 votes

La méthode Java split() supprime les chaînes vides à la fin ?

Consultez 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 :

Length = 4
Length = 2
Length = 3

Pourquoi la deuxième et la troisième sortie donnent 2 et 3 au lieu de 4. En sample.txt la condition pour la 2ème et 3ème ligne est de donner une nouvelle ligne( \n ou enter) immédiatement après avoir donné le délimiteur pour le troisième champ. Quelqu'un peut-il m'aider à obtenir une longueur de 4 pour la 2ème et la 3ème ligne sans changer la condition de la fonction sample.txt et comment imprimer les valeurs de de[2] (lancers ArrayIndexOutOfBoundsException ) ?

287voto

Fabian Steeg Points 24261

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

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

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

24voto

Johannes Weiß Points 19013

Jetez un coup d'œil à la docs voici la citation importante :

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

Si cela ne vous plaît pas, jetez un coup d'œil au commentaire de Fabian. Lorsque vous appelez String.split(String) il appelle String.split(String, 0) et qui élimine les chaînes vides à la fin (comme le dit la documentation), lors de l'appel à String.split(String, n) con n < 0 il ne rejettera rien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X