而nextLine()不等于“”

时间:2012-10-16 15:26:57

标签: java string input while-loop

我试图继续循环,而输入文件在下一行有一个字符串,但我得到一个错误。知道为什么吗?

while( !((input = in.nextLine()).equals(""))){
   ...
}

输出:

Enter file name: input1.txt
evil live
Exception in thread "main" This is a palindrome
level
This is a palindrome
dog
Not a palindrome
java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at Palindrome.main(Palindrome.java:41)

8 个答案:

答案 0 :(得分:2)

文件结束后没有行。当读取最后一行时,对nextLine()的下一次调用将失败。使用hasNextLine()来防止这种情况发生。

答案 1 :(得分:2)

您的代码不正确,因为输入可能会在不提供空行的情况下结束。在检查行是否为空之前,您应该检查一行是否可用:

while(in.hasNextLine() && !((input = in.nextLine()).equals(""))){
    ...
}

答案 2 :(得分:1)

in.nextLine()可能会返回一个null,该值已分配给input,您尝试调用equals

使用hasNextLinedocumentation here)确保您可以获得下一行。

答案 3 :(得分:1)

设置循环的方式,它永远不会到达“”字符串,因为它会在执行之前到达文件的末尾。它应该像

while (input.hasNextLine()) {
    ...
}

这意味着它会一直持续到文件没有下一行。

答案 4 :(得分:1)

null进行比较以及End-Of-File

as

  while(((input = in.nextLine())!= null) && !(input.equals(""))){

或尝试:

  while(in.hasNextLine(){
       input = in.nextLine();
        if(input != null && !(input.equals(""))){
          ........
        }
  }

答案 5 :(得分:0)

尝试使用此类事物,如果需要,请捕获异常:

input = in.nextLine();
while( !(input.equals(""))){
...
}

如果它抛出错误,那么设置一个try ... catch循环

答案 6 :(得分:0)

可能是你需要的,

while(in.hasNextLine()){
    input = in.nextLine();
}

答案 7 :(得分:0)

扫描仪在输入用完时会抛出异常。你好像在想它会返回一个零长度的字符串。

您是否一次使用扫描仪一行读取文件?这不是它的用途。您可能需要查看BufferedReader。