java - 我在 Java 中使用 readLine() 没有得到预期的结果

标签 java java-io

我正在使用下面的代码片段,但它并没有像我理解的那样正常工作。

public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String line;
    try {
        line = br.readLine();
        while(line != null) {
            System.out.println(line);
            line = br.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

从阅读有关 readLine() 的 Javadoc 中可以看出:

读取一行文本。一行被认为由换行符 (\n)、回车符 (\r) 或回车符后紧跟换行符中的任何一个终止.

返回: 包含行内容的 String,不包括任何行终止字符,如果已到达流末尾则为 null

throw : IOException - 如果发生 I/O 错误

根据我的理解,readLine 应该在第一次除了行终止符之外没有输入任何输入时返回 null,例如 \r。但是,这段代码最终会无限循环。经过调试,我发现只输入一个终止字符不是返回null,而是返回一个空字符串(“”)。这对我来说没有意义。我哪里理解不正确?

最佳答案

From my understanding of this, readLine should return null the first time no input is entered other than a line termination, like '\r'.

这是不正确的。如果到达流的末尾,readLine 将返回 null。也就是说,例如,如果您正在读取一个文件,并且文件结束,或者如果您正在从一个套接字中读取并且套接字关闭。

但是如果您只是简单地读取控制台输入,按下键盘上的返回键并不构成流的结束。它只是一个返回的字符(\n\r\n 取决于您的操作系统)。

所以,如果你想在空字符串和行尾都打断,你应该这样做:

while (line != null && !line.equals(""))

此外,如果您将一些文件直接输入到当前程序中,您当前的程序应该会按预期工作,如下所示:

java -cp . Echo < test.txt

关于java - 我在 Java 中使用 readLine() 没有得到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033/

相关文章:

java - 简单套接字程序中的错误

java - 使用mockito测试时父类(super class)方法的构造函数中出现NullPointerException

java - 由于大量输入的黑客等级超时而终止

java - switch 语句在这里是否合适,采用枚举?

android - 如何从文件中检索指定的数据?

Java-将数据写入并保存到txt文件

java - SOAP 体、命名空间问题

java - 如何确定 Java 字段是否具有 transient 修饰符?

java - TeeInputStream 和 PipedStream 在任何情况下都不起作用

Java IO 给我一个错误