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

亚伦

我正在使用下面的代码段,但是按我的理解,它无法正常工作。

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但是,此代码最终无限循环。调试之后,我发现当只输入终止符时,返回的不是空值,而是实际上返回了一个空字符串(“”)。这对我来说没有意义。我没有正确理解什么?

汤姆·洛赫斯特(Tom Lokhorst):

根据我的理解,在第一次没有输入任何行(例如'\ r')以外的输入时,readLine应该返回null。

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

但是,如果您只是在读取控制台输入,则敲击键盘上的Return键并不意味着流结束。它只是返回的一个字符(\n\r\n取决于您的操作系统)。

因此,如果您想同时中断空字符串和行尾,则应该执行以下操作:

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

另外,如果您直接将某些文件通过管道传输到它,则当前程序应该可以按预期工作,如下所示:

java -cp . Echo < test.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

If 语句和后增量作业:我没有得到我期望的结果 - 为什么?

尽管使用了等待,但我没有得到我的承诺的结果

使用 ROW_NUMBER() 没有得到我需要的结果

#定义b + c混淆。.我没有得到我期望的输出

我正在尝试打印我的数组,但没有得到我想要的结果

我没有得到想要的结果

为什么我在 TS 中使用 & 运算符时没有得到我所有的属性?

我需要这样的输出,但没有得到我的查询结果

我没有得到我想要的东西

mysql查询上的左联接没有得到我想要的结果

需要相减两次。没有得到我需要的结果

没有得到我想要的迭代

Haskell没有得到我的功能依赖

没有得到我的代码的输出

当我在Kotlin中使用原始parseList函数时,为什么没有得到正确的结果?

使用MVVM和Retrofit调用api时没有得到我的答复?

没有得到所有结果转移我的阵列

INNER JOIN 的问题我没有得到想要的结果

为什么我没有得到加法的结果?

为什么我没有得到相同的结果?

我在查询中没有得到正确的结果

qbasic-我的代码有什么问题我没有得到我想要的

没有值时,我的$ _POST没有得到我的选择名称

即使我的文档存在,我的 firebase 查询调用也没有得到我的文档

通过使用运费计算器的输入,我没有得到我想要的打印声明

为什么我没有得到我的泛型的属性?

我没有得到我的对象列表的正确值

查询没有得到期望的结果

使用 ssh 登录后,我没有得到 sysinfo