2009-08-26 16 views
7

estoy usando escáner para leer una línea de archivo de texto por línea, pero luego la forma de obtener el número de línea desde el escáner itera a través de cada entrada Mi programa es algo como esto:?Cómo obtener el número de línea mediante escáner

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

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

Esto funciona bien, pero por ejemplo:

 
1,2,3 
3,4,5 

Quiero saber el número de línea de la misma que significa 1,2,3 está en la línea 1 y la línea 3,4,5 está en 2.How puedo obtener ese ?

Respuesta

16

Puede usar un LineNumberReader en lugar del BufferedReader para realizar un seguimiento del número de línea mientras el escáner hace su trabajo.

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 solución "obvia" que por primera vez no funciona como el escáner lee por delante del token actual.

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

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

+0

Es una pena aún no existe una solución mejor que la creación de un escáner por línea, sin embargo. Me encontré con el mismo problema que con su primera solución "ingenua", el escáner lee demasiado adelante y parece que no hay forma de configurar un búfer más pequeño. – Joffrey

9

Sólo hay que poner un contador en el bucle:

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

Creo que esto solo funciona si tiene .useDelimiter() configurado en nueva línea. Si escanea en espacios en blanco (por ejemplo, palabras), contará palabras en su lugar. – Roalt

+1

Actualicé el ejemplo para usar hasNextLine/nextLine para que resuelva la pregunta del OP. –

+0

¡Realmente simple, y funciona! – tiboo

Cuestiones relacionadas