我试图继续循环,而输入文件在下一行有一个字符串,但我得到一个错误。知道为什么吗?
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)
答案 0 :(得分:2)
文件结束后没有行。当读取最后一行时,对nextLine()
的下一次调用将失败。使用hasNextLine()
来防止这种情况发生。
答案 1 :(得分:2)
您的代码不正确,因为输入可能会在不提供空行的情况下结束。在检查行是否为空之前,您应该检查一行是否可用:
while(in.hasNextLine() && !((input = in.nextLine()).equals(""))){
...
}
答案 2 :(得分:1)
in.nextLine()
可能会返回一个null,该值已分配给input
,您尝试调用equals
。
使用hasNextLine
(documentation 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。