1. ホーム
  2. java

[解決済み] JavaでEOFを検出する方法は?

2022-02-08 03:31:20

質問

私のコードでEOFを検出する方法をいくつか試しましたが、まだうまくいきません。 BufferedReaderやScannerを使ったり、EOFのフラグにchar u001aを使ってみたりしましたが、それでも私のコードには何の意味も成さないのです。 以下は私の最後のコードです。

    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に達した時点でプログラムが停止するはずなのですが、なぜか走り続けてしまい、ランタイムエラーが発生してしまいます。 助けてください。 ところで、私はここで新しいです。私の質問が本当に理解されるために明確でない場合は申し訳ありません。 以前はありがとうございました :)

どのように解決するのですか?

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

  1. read() は-1を返します。
  2. read(byte[]) は-1 を返します。
  3. read(byte[], int, int) は-1 を返します。
  4. readLine() は null を返します。
  5. readXXX() その他のXは EOFException .
  6. Scanner.hasNextXXX() は任意の X に対して false を返します。
  7. Scanner.nextXXX() 投げる NoSuchElementException は任意の X に対して

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