我正在使用下面的代码片段,但它并没有像我理解的那样正常工作。
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/