2009-02-13 9 views
98

Découvrez le programme ci-dessous.La méthode Java split() supprime les chaînes vides à la fin?

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 deuxième et troisième sortie donne 2 et 3 au lieu de 4. Dans le fichier sample.txt, condition pour 2 et 3 ligne est devrait donner newline (\n ou entrez) immédiatement après avoir donné délimiteur pour le troisième champ. Quelqu'un peut-il m'aider à obtenir la longueur en tant que 4 pour la 2ème et 3ème ligne sans changer l'état du fichier sample.txt et comment imprimer les valeurs de de[2] (throws ArrayIndexOutOfBoundsException)?

+0

Bonne question mais: Dupliqué! Et la réponse de la marque manquante est acceptée –

Répondre

22

un coup d'oeil à la docs, voici la citation importante:

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

Si vous ne l'aimez pas, un coup d'oeil au commentaire de Fabian. Lors de l'appel String.split(String), il appelle String.split(String, 0) et qui rejette les chaînes vides à la fin (comme le disent les docs), lors de l'appel String.split(String, n) avec n < 0 il ne se défaussera de rien.

249

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

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

See the Javadoc pour la méthode du partage en prenant deux arguments pour plus de détails.

+0

Ouais ... je l'ai eu .. Ça marche bien maintenant. Merci beaucoup .. – raja

+65

Alors marquez la réponse comme acceptée. –

+1

Ça ne marche pas – Frank

Questions connexes