为什么我的扫描仪在打印 StringBuilder 时会跳过所有其他用户输入?

Why is my scanner skipping every other user input when I print my StringBuilder?

public static void main(String[] args) {
    String welcomeMsg = "Enter inputs. Leave blank and hit Enter when done."

    Scanner sc = new Scanner(System.in);
    System.out.println(welcomeMsg);

    StringBuilder attendees = new StringBuilder();

    while (!sc.nextLine().equals("")){
        attendees.append(sc.nextLine());
    }
    System.out.println(attendees);
}

扫描仪似乎工作正常。我可以输入 say,然后按回车键。按 b 并按 enter。依此类推。然后,将该行留空并按回车键,它开始工作。 但是输出是:

bdfh

发生这种情况是因为您读取了该行两次,一次在这里 while (!sc.nextLine().equals("")) 然后又在这里 attendees.append(sc.nextLine()); 这导致跳过每个循环周期读取的第一行。

要解决此问题,只需使用临时字符串读取一次即可。这是一个选项:

//Read to temporary string
String line = sc.nextLine();

//Now process the string
while (!line.equals("")){
    attendees.append(line );

    //read the next line for the next loop cycle
    line = sc.nextLine()
}