Как получить номер строки с помощью сканера - PullRequest
7 голосов
/ 26 августа 2009

Я использую сканер для чтения текстового файла построчно, но как узнать номер строки, поскольку сканер выполняет итерации по каждому вводу? Моя программа выглядит примерно так:

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

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

Это отлично работает, но, например:

1,2,3 
3,4,5

Я хочу знать номер строки, это означает, что 1,2,3 - в строке 1, а 3,4,5 - в строке 2. Как мне это получить?

Ответы [ 2 ]

16 голосов
/ 26 августа 2009

Вы можете использовать LineNumberReader вместо BufferedReader, чтобы отслеживать номер строки, пока сканер делает свое дело.

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

Примечание: «Очевидное» решение, которое я впервые опубликовал, не работает, так как сканер читает перед текущим токеном.

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

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

10 голосов
/ 26 августа 2009

Просто поместите счетчик в цикл:

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

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