2009-08-26 10 views
7

J'utilise scanner pour lire une ligne de fichier texte en ligne, mais alors comment obtenir le numéro de ligne depuis itère scanner à travers chaque entrée Mon programme est quelque chose comme ceci:Comment obtenir le numéro de ligne en utilisant le scanner

s = new Scanner(new BufferedReader(new FileReader("input.txt"))); 

while (s.hasNext()) { 
System.out.print(s.next()); 

Cela fonctionne très bien, mais par exemple:

 
1,2,3 
3,4,5 

Je veux savoir le numéro de la ligne de ce qui signifie 1,2,3 est en ligne 1 et 3,4,5 est en ligne 2.How-je obtenir que ?

Répondre

16

Vous pouvez utiliser un LineNumberReader à la place du BufferedReader pour garder une trace du numéro de ligne pendant que le scanner fait son travail.

LineNumberReader r = new LineNumberReader(new FileReader("input.txt")); 
String l; 

while ((l = r.readLine()) != null) { 
    Scanner s = new Scanner(l); 

    while (s.hasNext()) { 
     System.out.println("Line " + r.getLineNumber() + ": " + s.next()); 
    } 
} 

Note: La solution « évidente » j'ai posté ne fonctionne pas comme le scanner lit en avance sur le jeton en cours.

r = new LineNumberReader(new FileReader("input.txt")); 
s = new Scanner(r); 

while (s.hasNext()) { 
    System.out.println("Line " + r.getLineNumber() + ": " + s.next()); 
} 

+0

Il est dommage qu'il n'y a toujours pas de meilleure solution que de créer un scanner par ligne, cependant. Je suis tombé sur le même problème que votre première solution "naïve", le scanner lit trop à l'avance et il ne semble pas y avoir de moyen de définir un tampon plus petit. – Joffrey

9

Il suffit de mettre un compteur dans la boucle:

s = new Scanner(new BufferedReader(new FileReader("input.txt"))); 

for (int lineNum=1; s.hasNext(); lineNum++) { 
    System.out.print("Line number " + lineNum + ": " + s.next()); 
} 
+2

Je pense que cela ne fonctionne que si vous avez .useDelimiter() mis à newline. Si vous recherchez des espaces (par exemple, des mots), cela comptera les mots à la place. – Roalt

+1

J'ai mis à jour l'exemple pour utiliser hasNextLine/nextLine afin qu'il résout la question de l'OP. –

+0

Vraiment simple, et fonctionne! – tiboo

Questions connexes