空扫行后Java Scanner停止读取[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了空扫行后Java Scanner停止读取[关闭]相关的知识,希望对你有一定的参考价值。

我正在寻找这个话题,我发现了这个Java stop reading after empty line

我有一个关于下一个代码的问题,该代码是在我之前引用的另一个StackOverflow页面中编写的:

while (!sc.nextLine().equals("")){
    text[i] = sc.nextLine();
    i++;        
}

我使用类似的测试它,这是代码:

List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while(!scanner.nextLine().equals(""))
{
    list.add(scanner.nextLine());
}
list.forEach(s -> System.out.println(s));

所以想法是,读取一些输入(字符串)将它们存储到列表中,当行为空时停止循环。

但是这个输入的结果:

1 2 3 4

是这个输出:

2 4

当然,我期待的是,因为当你在while句子中进行比较时,你会调用nextLine方法。所以下次你打电话的时候,你会打电话给第二个,所以下一行。

我在寻找是否有人知道解决这个问题的好方法?所以你正在读取输入,存储它们,如果线是空的,则停止循环。

谢谢你。

答案

每次调用nextLine() - 方法时扫描器都会有效地从输入中读取一行!这意味着你编程跳过每一行!

为避免这种情况,请将行读取分配给变量,然后将此变量的内容添加到列表中。例如这样:

List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
String line;
while (!(line = scanner.nextLine()).equals("")) {
    list.add(line);
}
list.forEach(s -> System.out.println(s));

以上是关于空扫行后Java Scanner停止读取[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Scanner 读取多行? [关闭]

6月10号 Java流程控制 用户交互Scanner

Java用户交互Scanner

Java用户交互Scanner

Java中Scanner类在nextInt()后无法输入nextLine()的问题

为啥 mysqli::multi_query 在一定数量的行后停止?