使用缓冲阅读器读取所有行

我想使用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();
    }

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


答案 1

使用 Java 8 的一行代码:

line =  buffer.lines().collect(Collectors.joining());

答案 2

阅读所有行的惯用方法是 。另外,我建议使用资源进行尝试类似的东西while ((line = buffer.readLine()) != null)

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


推荐