java:使用缓冲读取器并检查字符串是否为空

java:使用缓冲读取器并检查字符串是否为空,java,null,bufferedreader,Java,Null,Bufferedreader,为什么不if(txtLine==null){break;}工作?或者正确的答案是,为什么它仍然将字符串txtLine设置为null(字面意思)。按照我的理解,它应该在字符串为null时中断?我不希望它将字符串设置为“null”。但是当*.txt文件中没有更多行时停止 try{ BufferedReader txtReader = new BufferedReader (new FileReader ("test.txt")); while (true) { //

为什么不
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>();
private int-nChars=0;
私有字符串txtLine=新字符串();
私有ArrayList数组=新ArrayList();

我认为当您中断时,以及当您将
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);   
}
但这是一种更简洁(我认为更清晰)的形式:


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

我认为当您中断时以及将
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);   
}
但这是一种更简洁(我认为更清晰)的形式:


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

txtLine是在哪里定义的?你能把它添加到你的代码片段中吗?如果你通过Java中的
Scanner
BufferedReader
搜索阅读用户输入,你会立即得到数以百万计的结果,这将消除你的疑虑。我建议你在使用IOBTW时,一定要有最终的结果,你可以移动txtLine=txtleader.readLine();if(txtLine==null)之前和if(txtLine==null)之后的println(txtLine)@Lews:nLines只是将该行添加到数组中,然后返回其大小txtLine在哪里定义?你能把它添加到你的代码片段中吗?如果你通过Java中的
Scanner
BufferedReader
搜索阅读用户输入,你会立即得到数以百万计的结果,这将消除你的疑虑。我建议你在使用IOBTW时,一定要有最终的结果,你可以移动txtLine=txtleader.readLine();if(txtLine==null)之前和if(txtLine==null)之后的println(txtLine)@Lews:nLines只需将该行添加到数组中,然后返回其大小正确!这是
txtLine=txtReader.readLine()的顺序正如您所指出的。当然,在执行条件检查之前,它需要读取新行以检查它是否为null。正确!这是
txtLine=txtReader.readLine()的顺序正如您所指出的。当然,在执行条件检查之前,它需要读取新行以检查它是否为null。