Java扫描程序在空行后停止读取

Java扫描程序在空行后停止读取,java,loops,input,while-loop,Java,Loops,Input,While Loop,我正在研究这个话题,我发现了这个 我对我之前引用的另一个StackOverflow页面中编写的下一个代码有问题: while (!sc.nextLine().equals("")){ text[i] = sc.nextLine(); i++; } 我使用类似的方法来测试它,这是以下代码: List<String> list = new ArrayList<>(); Scanner scanner = new Scanner(System.

我正在研究这个话题,我发现了这个

我对我之前引用的另一个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));
因此,我们的想法是,读取一些输入字符串,将它们存储到一个列表中,当该行为空时,停止循环

但这种投入的结果是:

一, 2. 3. 四,

此输出是否为:

二, 四,

当然,我希望如此,因为当你在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));

对nextLine的每次调用都会显示。。。下一行。将结果存储在一个变量中。是的,非常好用,谢谢!