Как проверить конец строки с помощью сканера?


Я искал подобные вопросы, но ни один не помог.

Рассмотрим файл:

Привет, как дела?
где ты был?

Я хочу сделать несколько операций после окончания каждой строки. Если я использую next(), он не скажет мне, когда я достиг конца первой строки.

Также я видел hasNextLine(), но это только говорит Мне, существует ли другая линия или нет.

4 8

4 ответа:

Рассмотрите возможность использования нескольких сканеров: один для получения каждой строки, а другой для сканирования каждой строки после ее получения. Единственное предостережение, которое я должен дать, - это то, что вы должны быть уверены, что закроете внутренний сканер после того, как закончите его использовать. На самом деле вам нужно будет закрыть Все сканеры после того, как вы закончите их использовать, но особенно внутренние сканеры, так как они могут складываться и тратить ресурсы.

Например,

Scanner fileScanner = new Scanner(myFile);
while (fileScanner.hasNextLine()) {
  String line = fileScanner.nextLine();

  Scanner lineScanner = new Scanner(line);
  while (lineScanner.hasNext()) {
    String token = lineScanner.next();
    // do whatever needs to be done with token
  }
  lineScanner.close();
  // you're at the end of the line here. Do what you have to do.
}
fileScanner.close();

Вы можете сканировать текст строка за строкой и разбить каждую строку на токены с помощью метода String.split(). Таким образом, вы знаете, когда закончилась одна строка, а также имеете все маркеры на каждой строке:

Scanner sc = new Scanner(input);
while (sc.hasNextLine()){
    String line = sc.nextLine();
    if (line.isEmpty())
        continue;
    // do whatever processing at the end of each line
    String[] tokens = line.split("\\s");
    for (String token : tokens) {
        if (token.isEmpty())
            continue;
        // do whatever processing for each token
    }
}

Не уверен, уместно ли это или слишком поздно, когда я читаю это. Я относительно новичок в Java, но это, казалось, работало для меня, когда я столкнулся с подобной проблемой. Я просто использовал цикл DO-WHILE с концом спецификатора файла, обозначенного простой строкой.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;`enter code here`

public class Main {
    public static void main(String[] args) {
        List<String> name = new ArrayList<>();
        Scanner input = new Scanner(System.in);
        String eof = "";

        do {
            String in = input.nextLine();
            name.add(in);
            eof = input.findInLine("//");
        } while (eof == null);

        System.out.println(name);
     }
}

Вы можете использовать сканер и метод, который вы упомянули:

        Scanner scanner = new Scanner(new File("your_file"));
        while(scanner.hasNextLine()){
            String line = scanner.nextLine();
            // do your things here
        }