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

问题描述 投票:-1回答:1

我正在寻找这个话题,我发现了这个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方法。所以下次你打电话的时候,你会打电话给第二个,所以下一行。

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

谢谢你。

java loops input while-loop
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.