1

なぜ機能if (txtLine == null) { break; };しないのですか?あるいは、正しい答えは、なぜ文字列txtLineを(文字通り)nullに設定するのかということです。私の理解では、文字列がnullになるとすぐに壊れますか?文字列を「null」に設定したくありません。ただし、*。txtファイルに行がなくなったら停止します

try{
    BufferedReader txtReader = new BufferedReader (new FileReader ("test.txt"));
    while (true) {
        // Reads one line.
        println(txtLine);
        if(txtLine == null){
            break;
        };
        txtLine = txtReader.readLine();
        nLines(txtLine);
    }
    txtReader.close();
} catch (IOException ex) {
    throw new ErrorException(ex);   
}

txtFile変数はIVARとして定義されています

private int nChars = 0;
private String txtLine = new String(); 
private ArrayList <String> array = new ArrayList <String>();
4

1 に答える 1

4

ブレークするときとtxtLine、ファイルから読み取られる次の行になるように値を変更するときの順序は逆になっていると思います。コードは次のようになります。

try{
    BufferedReader txtReader = new BufferedReader (new FileReader ("test.txt"));
    while (true) {
        // Reads one line.
        println(txtLine);
        txtLine = txtReader.readLine();
        // check after we read the value of txtLine
        if(txtLine == null){
            break;
        }

        nLines(txtLine);
    }
    txtReader.close();
} catch (IOException ex) {
    throw new ErrorException(ex);   
}

しかし、これははるかに簡潔な(そして私が思うに、より明確な)形式です:

try{
    BufferedReader txtReader = new BufferedReader (new FileReader ("test.txt"));
    while ((txtLine = txtReader.readLine()) != null) {
        // Reads one line.
        println(txtLine);
        nLines(txtLine);
    }
    txtReader.close();
} catch (IOException ex) {
    throw new ErrorException(ex);   
}

ここwhile ((txtLine = txtReader.readLine()) != null)で、txtLineを次の行に設定し、続行する前にtxtLineがnullでないことを確認します。

于 2012-09-30T17:29:39.713 に答える