为什么input.nextint方法有一个\ n作为剩余?

时间:2017-08-31 10:19:04

标签: java io java.util.scanner

在回答这个问题时,我不明白为什么input.nextInt有一个换行符作为剩余字符。

Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?

2 个答案:

答案 0 :(得分:1)

答案很简单:

Scanner#nextInt()读取下一个整数,但不读取用户按下以提交整数的换行符(ENTER)。

要理解这一点,您必须知道您键入的所有内容都将写入缓冲区,Scanner方法尝试从中读取。

请注意以下示例:

System.out.println("Enter a number: ");
int i = scanner.nextInt();
System.out.println("Enter a line: ");
String l = scanner.nextLine();

会发生什么:

  • 用户看到Enter a number:,然后按17ENTER
  • 扫描程序将读取17,但保留ENTER的换行符。
  • 程序会写Enter a line:,但扫描程序会读取ENTER的换行符,而不是等待输入。

答案 1 :(得分:0)

这纯粹是一个设计决定,nextInt()没有消费换行符的原因,是因为可能还有一些其他令牌尚未被解析,这是最不合适的假设字符串中没有任何内容,并使用换行符。

例如,您将获得以下输入
123 123 \n

调用nextInt()将导致缓冲区中留下以下字符串
123 \n

再次拨打nextInt()
\n