Nextline和scanner是否忽略Java中的行?

Nextline和scanner是否忽略Java中的行?,java,arraylist,Java,Arraylist,我创建了一个Arraylist,因为我正在将未知数量的字符串复制并粘贴到ide中进行扫描,这可能是行尾的一个问题 我通过粘贴三行来测试它们。例如,以以下示例为例: Scanner s = new Scanner (System.in); while(!s.nextLine().isEmpty()){ a.add(i, s.nextLine()); i++; } System.out.println(a.size()); 我将复制并粘贴它们,Arraylist的大小将为2,而世界将占据位置0

我创建了一个Arraylist,因为我正在将未知数量的字符串复制并粘贴到ide中进行扫描,这可能是行尾的一个问题

我通过粘贴三行来测试它们。例如,以以下示例为例:

Scanner s = new Scanner (System.in);
while(!s.nextLine().isEmpty()){

a.add(i, s.nextLine());
i++;
}

System.out.println(a.size());
我将复制并粘贴它们,Arraylist的大小将为2,而世界将占据位置0

我自己的理论是,while循环使用第一行检查它是否为空,然后第二行被放入Arraylist,第三行被检查,空白被放入第二个位置


然后以三行的格式粘贴字符串,然后按enter键一次,这可能会影响行尾。有人对发生的事情有什么见解吗?谢谢,

您需要捕获要测试的线路,而不是将其丢弃。对s.nextLine的每次调用都读取一行

Hello
World
Again
或者正如其他人所提到的,您可以使用s.hasNext作为循环条件,如下所示:

Scanner s = new Scanner (System.in);
String line;
while(!(line = s.nextLine()).isEmpty()){
    a.add(i, line);
    i++;
}

System.out.println(a.size());

而不是一会儿!s、 下一行。我想再试一次。下一行{您已经回答了自己的问题,您的理论是正确的。您应该在while条件中使用hasNext,或者将s.nextLine保存到一个变量中,并在add调用中使用它。或者,正如@altoids建议的那样,使用ScannerhasNext查看是否有其他可用的令牌。工作很好,我知道我错在哪里了。谢谢!
Scanner s = new Scanner (System.in);
while(s.hasNext()) {
    a.add(i, s.nextLine());
    i++;
}

System.out.println(a.size());