Scanner on text file hasNext() is infinite

后端 未结 4 1567
别跟我提以往
别跟我提以往 2020-12-03 16:17

I\'m writing a simple program in Java and it requires reading data from a text file. However, I\'m having trouble counting lines. The issue seems generic enough for a simple

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-03 16:36

    After you call hasNext() the first time if you don't read from the file hasNext() will always return true. Because the front of the input doesn't change.

    Imagine you have a file with this line in it:

    this is input

    If you call hasNext() on this file, it will return true because there is a next token in the file, in this case the word this.

    If you don't read from the file after this initial call, the "next" input to be processed is STILL the word this. The next input doesn't change until you read from the file.

    TL;DR

    When you call hasNext() read from the file, otherwise you will always have an infinite loop.

    Additionally

    If you really want to use hasNext(), or would like to, you could create another Scanner object and read through the file to count the lines, then your loop would work fine. also, you should really use 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;
    }
    

    Hope this is helpful.

提交回复
热议问题