空行后Java扫描仪停止读取

时间:2019-03-16 13:57:53

标签: java loops input while-loop

我正在寻找这个主题,并且找到了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方法。因此,下次调用它时,您将调用第二个,即下一行。

我在寻找是否有人知道解决此问题的好方法?因此,您正在读取输入并将其存储,如果该行为空,则停止循环。

谢谢。

1 个答案:

答案 0 :(得分:3)

每次调用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));