我搜索过类似的问题,但都没有帮助。
考虑一个文件:
你好,你好吗? 你在哪儿?
我希望在每一行结束后进行一些操作。如果我使用next()
它就不会告诉我何时到达第一行的末尾。
我也见过hasNextLine()
,但它只告诉我是否存在另一条线。
答案 0 :(得分:16)
考虑使用多个扫描仪,一个用于获取每一行,另一个用于在收到后扫描每一行。我必须提出的唯一警告是,在完成使用后必须确保关闭内部扫描仪。实际上,您需要在使用它们后关闭所有扫描仪,尤其是内部扫描仪,因为它们可能会增加并浪费资源。
如,
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();
答案 1 :(得分: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
}
}
答案 2 :(得分: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);
}
}
答案 3 :(得分:0)
您可以使用扫描仪和您提到的方法:
Scanner scanner = new Scanner(new File("your_file"));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
// do your things here
}