Java 扫描仪nextInt()与nextLine()从控制台读取。。。。为什么在没有nextLine()的情况下可以使用nextInt()?

Java 扫描仪nextInt()与nextLine()从控制台读取。。。。为什么在没有nextLine()的情况下可以使用nextInt()?,java,java.util.scanner,Java,Java.util.scanner,为什么我在控制台的不同行上输入数字时不必使用nextLine?我希望控制台能够解释每行的结尾\n,但无论在每个nextInt()之后使用nextLine(),程序的工作原理都是一样的。使用Eclipse // Example used 10 5 // # lines to read , divisor 22 // if # divisible by divisor, count++ 15 10 25 17 13 15 10 7 9 public

为什么我在控制台的不同行上输入数字时不必使用nextLine?我希望控制台能够解释每行的结尾\n,但无论在每个nextInt()之后使用nextLine(),程序的工作原理都是一样的。使用Eclipse

// Example used
10 5      // # lines to read ,  divisor
22        //  if # divisible by divisor, count++ 
15 
10 
25 
17 
13 
15 
10 
7 
9 

publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
int n=getNumber(键盘);
int k=getNumber(键盘);
int numlinepassed=getNumberPassCriteria(键盘,n,k);
System.out.println(“#通过:“+numlinepassed”);
}
公共静态int getNumber(扫描仪键盘){
返回keyboard.nextInt();
}
公共静态int getNumberPassCriteria(扫描仪键盘,int n,int k){
int计数器=0;
对于(int i=0;i
因为
扫描仪的默认分隔符是此模式

\p{javaWhitespace}+
(注意:这个确切的模式没有明确的文档记录,但是当您在没有明确指定其他分隔符的情况下实例化一个模式时,调用
Scanner
delimiter()
方法就可以得到它)

编辑

根据per的建议,我所做的这些杂乱无章的参考资料实际上直接记录在
Scanner
文档中。您可以直接跳到下面的列表


该模式的含义记录在类的文档中,该类本身引用该方法 该模式意味着至少一个

  • Unicode空格字符(空格分隔符、行分隔符或段落分隔符),但也不是不间断空格('\u00A0'、'\u2007'、'\u202F')。 *'\t',U+0009水平制表
  • '\n',U+000A换行符
  • '\u000B',U+000B垂直制表
  • '\f',U+000C表单馈送
  • '\r',U+000D回车
  • '\u001C',U+001C文件分隔符
  • '\u001D',U+001D组分隔符
  • '\u001E',U+001E记录分隔符
  • '\u001F',U+001F单元分离器
其中包括换行符(第二个要点)。

可能与

只有当您正在阅读或试图使用
nextLine
阅读数字后的下一行时,这才是一个问题

为什么?
nextInt
读取一个标记,定义为分隔符s之间的文本(默认空白包括换行符和回车符),这意味着,如果输入以一个或多个分隔符开始,则忽略(丢弃)这些标记
nextLine
不读取令牌,它只读取换行符;因此,如果下一个字符是换行符,则返回一个空字符串


易于测试:只需在数字之间输入几行空行-您的代码应该可以毫无问题地读取它们。

delimiter文档有自己的html锚:和shows模式文档(还有更多)((好的,它有点隐藏))@user15244370谢谢,编辑一致不久前我很高兴搜索它。。。我几乎对Javas文档失去了信心
\p{javaWhitespace}+