使用BufferedReader读取所有行


问题内容

我想使用BufferedReader在控制台中输入多行文本,然后单击“ Enter”以查找整个文本长度的总和。问题在于,似乎我进入了一个无限循环,当我按“
Enter”键时,程序并没有结束。我的代码如下:

InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(instream);

    line= buffer.readLine();

    while (line!=null){
        length = length + line.length();
        line= buffer.readLine();
    }

你能告诉我我在做什么错吗?


问题答案:

阅读所有行的惯用方式是while ((line = buffer.readLine()) != null)。另外,我建议try-with- resources发表声明。就像是

try (InputStreamReader instream = new InputStreamReader(System.in);
        BufferedReader buffer = new BufferedReader(instream)) {
    long length = 0;
    String line;
    while ((line = buffer.readLine()) != null) {
        length += line.length();
    }
    System.out.println("Read length: " + length);
} catch (Exception e) {
    e.printStackTrace();
}

如果你想,当你收到一个空行来结束循环,在添加一个测试为while循环

while ((line = buffer.readLine()) != null) {
    if (line.isEmpty()) {
        break;
    }
    length += line.length();
}

JLS-14.15。该break声明说:

一条break语句将控制权从一个封闭的语句中移出。