Как узнать номер строки с помощью сканера
-
19-09-2019 - |
Вопрос
Я использую сканер для чтения текстового файла построчно, но как получить номер строки, поскольку сканер выполняет итерацию каждого ввода? Моя программа выглядит примерно так:
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. Как мне это получить?
Решение
Вы можете использовать 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());
}
Другие советы
Просто поместите счетчик в цикл:
s = new Scanner(new BufferedReader(new FileReader("input.txt")));
for (int lineNum=1; s.hasNext(); lineNum++) {
System.out.print("Line number " + lineNum + ": " + s.next());
}
Не связан с StackOverflow