10

我搜索了类似的问题,但没有任何帮助。

考虑一个文件:

你好你好吗?
当时你在哪里?

我想在每一行结束后做一些操作。如果我使用next()它不会告诉我何时到达第一行的末尾。

我也见过hasNextLine(),但它只告诉我是否存在另一条线。

4

4 回答 4

20

考虑使用多个扫描仪,一个用于获取每一行,另一个用于在您收到后扫描每一行。我必须给出的唯一警告是,您必须确保在使用完内部 Scanner 后关闭它。实际上,您需要在使用完所有Scanner 后关闭它们,尤其是内部 Scanner,因为它们会累加并浪费资源。

例如,

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();
于 2013-03-03T08:16:15.043 回答
1

您可以逐行扫描文本并使用方法将每一行拆分为标记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
    }
}
于 2013-03-03T08:47:26.407 回答
1

You can use Scanner and the method you mentioned:

        Scanner scanner = new Scanner(new File("your_file"));
        while(scanner.hasNextLine()){
            String line = scanner.nextLine();
            // do your things here
        }
于 2018-10-04T09:23:40.600 回答
0

当我阅读本文时,不确定这是否相关或为时已晚。我对 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);
     }
}
于 2018-09-26T09:16:40.133 回答