当前位置: 首页 > 面试题库 >

文本文件hasNext()上的扫描器是无限的

公良玺
2023-03-14
问题内容

我正在用Java写一个简单的程序,它需要从文本文件中读取数据。但是,我在计算行数时遇到了麻烦。对于一个简单的Google搜索来说,这个问题似乎已经足够普遍了,但是我什至没有在搜索正确的东西。

我正在学习的教科书建议要计算文本文件中的行数,您应该执行以下操作:

public static int[] sampleDataArray(String inputFile) throws IOException
{
        File file = new File(inputFile);
        Scanner inFile = new Scanner(file);

        int count = 0;

        while (inFile.hasNext())
            count++;

        int[] numbersArray = new int[count];

        inFile.reset();
        for (int i = 0; i < count; i++)
        {
            numbersArray[i] = inFile.nextInt();
        }

        inFile.close();
        return numbersArray;
}

在我看来,这while (inFile.hasNext())是问题所在。我认为hasNext()无限运行。我在代码中使用的数据文件肯定具有有限数量的数据行。

我该怎么办?


问题答案:

hasNext()第一次调用后,如果您不从文件中读取,hasNext()将始终返回true。因为输入的前面没有变化。

假设您有一个包含以下内容的文件:

这是输入

如果调用hasNext()此文件,它将返回,true因为文件中存在下一个标记,在本例中为单词this。

如果您在此初始调用后未从文件中读取,则要处理的“下一个”输入仍为单词this。直到您从文件中读取后,下一个输入才会更改。

TL; DR

当您调用hasNext()从文件读取时,否则将始终有无限循环。

另外

如果您确实要使用hasNext(),或者想要使用,可以创建另一个Scanner对象并读取文件以计数行数,那么循环就可以正常工作。另外,你应该真正使用hasNextLine()

public int countLines(File inFile)
{
   int count = 0;
   Scanner fileScanner = new Scanner(inFile);

   while(fileScanner.hasNextLine()) //if you are trying to count lines
   {                                //you should use hasNextLine()
       fileScanner.nextLine() //advance the inputstream
       count++;
   }

   return count;
}

希望这会有所帮助。



 类似资料:
  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 我应该在属性文件中添加什么以便它包括。模块文件?

  • 我已经做了很多关于这个主题的研究,但我发现的一切都是每次“使用的函数getOverContent的压模”。我做了这个,但还是不行。 我做了一个程序,合并在一起的PDF的汇编,然后它分页这个新的文件(我希望你可以跟随我写的)。原始PDF是自制的(直接保存在PDF中)或不是(扫描)。这是最后几个有麻烦的地方。分页显示在第一个,但不是在秒(它可能存在,但它应该在图像后面)! 这里是分页的代码,有人知道我

  • 我想为这个代码寻求一些帮助。我没有问题读取一个文件本身和使用它作为扫描仪。我可以很容易地数出文件的双倍数。作为一个例子,这些是txt文件的前五个double。(这些数字应该是垂直列出的,但我几乎不怀疑这会有所不同) 这段代码总体上只是打印0.0的“num”数量,而不是将实际数字本身相加。请帮忙,谢谢。

  • 问题内容: 我试图从用户连续读取输入,直到用户键入退出为止。我仅通过输入“ quit”进行测试,但console.hasNext()似乎未返回false。实际上,似乎该程序在第7行(hasNext()行)上被阻止。有任何想法吗? 问题答案: 如果将your 声明为,它将询问是否要接收下一个值。然后,该类将等待用户输入内容,然后返回true。 保留文件之类的东西,其中输入大小是固定的。这样,当查询文

  • 问题内容: 我正在用Java编写程序,我需要做的一件事情就是为每个最短路径问题创建每个有效位置的集合。位置在.txt文件中定义,该文件遵循严格的模式(每行一个条目,没有多余的空格),非常适合使用.nextLine获取数据。我的问题是,文件中有241行(从432行中删除),扫描程序在通过条目的3/4处停止工作,并且无法识别任何新行。 我的代码: 数据 当然,“扫描仪在这里停止读取”不在数据中,我只是