1

为什么不if (txtLine == null) { break; };工作?或者也许正确的答案是为什么它仍然将字符串设置txtLine为空(字面意思)。我理解它的方式,它应该在字符串为空的那一刻中断?我不希望它将字符串设置为“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);   
}

Wherewhile ((txtLine = txtReader.readLine()) != null)将 txtLine 设置为下一行,然后在继续之前检查 txtLine 是否为空。

于 2012-09-30T17:29:39.713 回答