1

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

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)
4

8 回答 8

3

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

while(in.hasNextLine() && !((input = in.nextLine()).equals(""))){
    ...
}
于 2012-10-16T15:30:25.980 回答
2

文件末尾没有一行。当读取最后一行时,下一次调用nextLine()将失败。用于hasNextLine()防止这种情况。

于 2012-10-16T15:30:25.180 回答
1

in.nextLine()可能返回一个空值,它被分配给input你试图调用的空值equals

使用hasNextLine此处的文档)确保您可以获得下一行。

于 2012-10-16T15:29:59.460 回答
1

设置循环的方式,它永远不会到达 "" 字符串,因为它会在这样做之前到达文件的末尾。它应该是这样的

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

这意味着它将继续,直到文件没有下一行。

于 2012-10-16T15:30:48.990 回答
1

比较null以检查End-Of-File

作为

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

或尝试:

  while(in.hasNextLine(){
       input = in.nextLine();
        if(input != null && !(input.equals(""))){
          ........
        }
  }
于 2012-10-16T15:30:58.003 回答
0

尝试使用这种类型的东西,如果需要,捕获异常:

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

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

于 2012-10-16T15:33:16.740 回答
0

可能你需要,

while(in.hasNextLine()){
    input = in.nextLine();
}
于 2012-10-16T15:35:23.327 回答
0

Scanner 在输入用完时抛出异常。你似乎在想它会返回一个零长度的字符串。

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

于 2012-10-16T15:37:53.623 回答