为什么我在hasNextLine上出错,但在hasNext上却没有?

时间:2017-02-15 21:45:27

标签: java

for(int i = 0 ; i < 10 ; i++)
{
out.println(9);
}

out.close();

while (s.hasNextLine()) {
  int i = s.nextInt();
  if ( i == 9);
  {
  System.out.print("*");
  }
} 

s.close();

它仍打印出10&#34; *&#34;,但之后我收到此错误:

**********java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at insertionSort.main(insertionSort.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

但如果我使用hasNext而不是hasNextLine,它可以正常工作。

所以我想知道为什么hasNext有效,但hasNextLine没有。

2 个答案:

答案 0 :(得分:1)

  
      
  • hasNextLine()   检查缓冲区中是否有另一个linePattern
  •   
  • hasNext()   检查缓冲区中是否有可解析的令牌,如   由扫描仪的分隔符分隔。
  •   
     

由于扫描仪的分隔符是空格,而linePattern是   也是白色空间,有可能在那里有一个linePattern   缓冲但没有可解析的令牌。

来源:https://stackoverflow.com/a/31993534/5333805

所以你的文件可能有一个空的换行符,所以你试着读一个不存在的字符。

答案 1 :(得分:0)

在尝试获取之前,您应该检查nextInt:

while (s.hasNextLine()) {
  if(s.hasNextInt()){
    int i = s.nextInt();
    if ( i == 9);
    {
      System.out.print("*");
    }
  }
}