web-dev-qa-db-ja.com

JavaでEOFを検出するには?

コード内でEOFを検出する方法をいくつか試しましたが、まだ動作していません。BufferedReader、Scanner、およびchar u001aを使用してEOFにフラグを立てようとしましたが、私のコードにはどんな意味でもあります。これが私の最後のコードです。

    Scanner n=new Scanner(System.in);
    String input;
    int counter=0;

    while(n.hasNextLine())
    {
        input=n.nextLine();
        char[] charInput=input.toCharArray();
        for (int i = 0; i < input.length(); i++) {
            if(charInput[i]=='"')
            {
                if(counter%2==0)
                {
                    System.out.print("``");
                }
                else
                {
                    System.out.print("''");
                }
                counter++;
            }
            else
            {
                System.out.print(charInput[i]);
            } 
        }
        System.out.print("\n");
    }

プログラムは既にEOFに達したときに停止するはずでしたが、なぜかはわかりません。何らかの理由で実行し続け、実行時エラーが発生します。助けてください。ちなみに、私はここに新しいのですが、私の質問が理解するのが本当に明確でない場合は申し訳ありませんが、前にありがとう:)

9
Bertha Alan

EOFに遭遇していないため、実行を続けます。ストリームの終わりに:

  1. read()は-1を返します。
  2. read(byte[])は-1を返します。
  3. read(byte[], int, int)は-1を返します。
  4. readLine()はnullを返します。
  5. readXXX()は、他のXがEOFExceptionをスローする場合。
  6. Scanner.hasNextLine()はfalseを返します。
  7. Scanner.nextLine()NoSuchElementExceptionをスローします。

これらのいずれかに遭遇しない限り、プログラムはストリームの終わりに遭遇していません。 NB \u001aはCtrl/zです。 EOFではありません。 EOFは文字値ではありません。

10
user207421

これは私がやったことです

Scanner s = new Scanner(f); //f is the file object

while(s.hasNext())
{
String ss = s.nextLine();
System.out.println(ss);
}

私のために働いた

1
Srijan Goyal