我正在使用下面的代码段,但是按我的理解,它无法正常工作。
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
包含行内容的A ,不包含任何行终止符;如果已到达流的末尾,则返回null
抛出:IOException
-如果发生I / O错误
根据我的理解,readLine
第一次输入除行终止以外的其他任何输入都应该返回null,例如\r
。但是,此代码最终无限循环。调试之后,我发现当只输入终止符时,返回的不是空值,而是实际上返回了一个空字符串(“”)。这对我来说没有意义。我没有正确理解什么?
根据我的理解,在第一次没有输入任何行(例如'\ r')以外的输入时,readLine应该返回null。
那是不对的。如果到达流的末尾,readLine
则将返回null
。也就是说,例如,如果您正在读取文件,并且文件结束了,或者您正在从套接字读取并且套接字关闭。
但是,如果您只是在读取控制台输入,则敲击键盘上的Return键并不意味着流结束。它只是返回的一个字符(\n
或\r\n
取决于您的操作系统)。
因此,如果您想同时中断空字符串和行尾,则应该执行以下操作:
while (line != null && !line.equals(""))
另外,如果您直接将某些文件通过管道传输到它,则当前程序应该可以按预期工作,如下所示:
java -cp . Echo < test.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句