Scanner nextLine()偶尔会跳过输入

时间:2014-11-26 04:11:03

标签: java java.util.scanner

这是我的代码

Scanner keyboard = new Scanner(System.in);

System.out.print("Last name: ");
lastName = keyboard.nextLine(); 

System.out.print("First name: ");
firstName = keyboard.nextLine();

System.out.print("Email address: ");
emailAddress = keyboard.nextLine();

System.out.print("Username: ");
username = keyboard.nextLine();

并输出此

Last name: First name: 

基本上它跳过让我输入lastName并直接转到firstName的提示符。

但是,如果我使用keyboard.next()代替keyboard.nextLine(),则可以正常使用。有什么想法吗?

1 个答案:

答案 0 :(得分:8)

让我猜一下 - 您没有显示使用上面尝试获取lastName的扫描程序的代码。在该尝试中,您不会处理行结束令牌,因此它会悬空,只有在您尝试获取nextLine()的{​​{1}}调用时才被吞没

例如,如果你有这个:

lastName

你会遇到问题。

一种解决方案,只要您将EOL令牌悬空,只需拨打Scanner keyboard = new Scanner(System.in); System.out.print("Enter a number: "); int number = keyboard.nextInt(); // dangling EOL token here System.out.print("Last name: "); lastName = keyboard.nextLine(); 即可吞下它。

例如,

keyboard.nextLine()