2009-08-26 9 views
7

sto usando scanner per leggere una riga di file di testo per riga, ma poi come ottenere il numero di riga dal itera scanner per ogni ingresso Il mio programma è qualcosa di simile:?Come ottenere il numero di linea utilizzando scanner

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

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

Questo funziona bene ma per esempio:

 
1,2,3 
3,4,5 

voglio sapere il numero di riga di essa che significa 1,2,3 è in linea 1 e 3,4,5 è in linea 2.How posso ottenere che ?

risposta

16

È possibile utilizzare uno LineNumberReader al posto di BufferedReader per tenere traccia del numero di riga mentre lo scanner fa il suo dovere.

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()); 
    } 
} 

Nota: La soluzione "ovvio" ho postato non funziona come lo scanner legge in vista del token corrente.

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

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

+0

è un peccato non c'è ancora una soluzione migliore di creare uno scanner per riga, però. Mi sono imbattuto nello stesso problema della tua prima soluzione "ingenua", lo scanner legge troppo in anticipo e non sembra esserci alcun modo per impostare un buffer più piccolo. – Joffrey

9

Basta mettere un contatore nel ciclo:

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

Penso che questo funzioni solo se hai. UseDelimiter() impostato su newline. Se si esegue la scansione di spazi bianchi (ad es. Parole) anziché contare le parole. – Roalt

+1

Ho aggiornato l'esempio per utilizzare hasNextLine/nextLine in modo che risolva la domanda dell'OP. –

+0

Davvero semplice e funziona! – tiboo

Problemi correlati