0

我有一个代码,我正在使用 Scanner Class 扫描行并循环直到没有行。

我的代码如下所示:

File file = new File(filePath);

if (file.exists()) {
    Scanner s = new Scanner(file);
    String tmp = null;
    int result = 0;
    try {
        while (true) {
            tmp = s.nextLine();
            if (tmp != null && tmp.equals("")) {
                result += Integer.parseInt(tmp);
            }
            System.out.println(runSequence(Integer.parseInt(tokens[0])));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(result);
}

它给出了错误

tmp = s.nextLine();

java.util.NoSuchElementException:找不到行

这很奇怪,因为之前相同的代码运行良好。

为什么这条线会出错?

编辑:

我的错误是我没有正确说明问题,我特别将 try catch 块留在了 while 循环之外,这样我就可以在行结束时退出...我的问题是为什么我无法读取任何行...我在 txt 文件中有大约 3-4 行要读取,它没有读取任何内容,并且在第一行读取自身时给出异常...

4

3 回答 3

2

我认为更好的编码方法是使用Scanner#hasNextLine()在 while 循环中设置一个条件。Scanner#hasNextLine() 将确保其中的代码只有在 file= 中有一行时才会运行。

              while (s.hasNextLine()) {
                tmp = s.nextLine();
                if (tmp != null && tmp.equals("")) {
                    result += Integer.parseInt(tmp);
                }
于 2013-03-28T13:21:06.477 回答
1
while (s.hasNextLine())  
{  
   //...  
}
于 2013-03-28T13:21:40.820 回答
1
if (tmp != null && tmp.equals(""))

应该是(如果你试图检查给定的字符串不是空字符串)

if (tmp != null && !tmp.isEmpty())

我认为您到达文件末尾没有剩余行并且您的条件是 while(true) 所以它也尝试读取那个时间。所以你得到 NoSuchElementException(如果没有找到行)

所以最好将你的while循环更改为

while (s.hasNextLine()){  
   tmp = s.nextLine();
   // then do something

}
于 2013-03-28T13:23:57.667 回答