为什么我的扫描仪在打印 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()
}
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()
}