in.hasNextLine()永远不会在Java中终止

时间:2014-04-15 14:37:23

标签: java loops methods infinite

所以我正在编写一个程序,从文件中的数据中填充部分填充的数组,我需要知道文件中的行数,这样我就可以在for循环中创建一个条件,这样就没有了边界异常。所以我创建了一个方法,说:

public static int lineFinder(String[] names) throws FileNotFoundException
    {
        Scanner in = new Scanner(new File("prog6_1.txt"));
        int count = 0;

        while(in.hasNextLine())
        {
           count++;
        }
        return count;
         }

我的文件如下:

3459凯特伊丽莎白布朗4.00

5623 Rachel Jessica Smith 3.45

9837 Thomas Robert Doe 3.73

1235 Riley Leigh Green 2.43

它永远不会终止,我无法弄清楚为什么因为我在最后放了一条额外的线。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

hasNextLine()方法不会将光标向前移动。你需要在循环中使用nextLine()方法来做到这一点。

答案 1 :(得分:2)

hasNextLine()仅检查,但doesn't consume the line。你需要在循环中调用nextLine()

答案 2 :(得分:1)

hasNextLine()只是检查下一行是否可用它没有获取下一行,因为在验证下一行存在后你应该使用nextLine()。修改你的while循环,如下所示:

 while(in.hasNextLine())
    {
      in.nextLine();
       count++;
    }

答案 3 :(得分:0)

hasNextLine()不会使光标前进(即,它不消耗该线)。您的代码应使用in.nextLine(),如下所示:

public static int lineFinder(String[] names) throws FileNotFoundException
{
    Scanner in = new Scanner(new File("prog6_1.txt"));
    int count = 0;

    while(in.hasNextLine())
    {
        in.nextLine();
        count++;
    }
    return count;