0

だから私は、標準入力の終わりまで(CTRL + Dまたは入力ファイルの終わりまで)ユーザーからの文字列を分析し続けることになっているJavaプログラムを書いています。プログラムは意図したとおりに動作しますが、CTRL + D を押すと、ヌル ポインター例外が発生します。問題のコードは次のとおりです。

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String line = " ";
    while (line != null) {
        line = in.readLine();
        String[] tokens = line.split(" ");
        System.out.println(line); ......

null ポインターはString[] tokens = line.split(" ");を対象としています。

コードが null の行をトークン化しようとしているようです。しかし、ヌル行をトークン化しようとしない方法で書いたと思いました。誰でも私を助けることができますか?

4

2 に答える 2

2

while ループを次のように変更します。

while ((line = in.readLine())!= null) {

そして、その中の最初の行を削除します。

ループ内の行を読んでいて、後でテストしていたことに注意してください。したがって、NPEファイルの最後に a があります。

また、読み取り後にファイルをトークン化する場合は、Scanner実際にクラスを使用することをお勧めします。

于 2013-01-17T17:00:10.997 に答える
0

問題は、それwhileが事前チェック状態であることです。ループの先頭では、linenull ではありません。代わりにa を使用する必要がありますdo-while

while (line != null) {
    line = in.readLine(); // in the loop, but in.readLine() returns null
    String[] tokens = line.split(" "); // OH SHI- LINE IS NULL
    System.out.println(line);
于 2013-01-17T17:00:50.790 に答える