【问题标题】:Reading next line InputStream Java阅读下一行 InputStream Java
【发布时间】:2011-04-26 15:12:29
【问题描述】:

我有一个可以从文本文件中读取的 InputStream。我注意到输入流没有从下一行的空白中读取。

示例文本文件:

[This is

A test file

Here.]

代码:

while ((str = br.readLine())!= null) {
    System.out.println(str);
}

一些文本文件之间会有多个换行符。如何让输入流接受断线?

从示例文本文件中可以看出,“[This is”后面是一个空行,然后是“A test file”。如何读取两组字符串之间的空行? (这就是我对换行/断线的定义)

【问题讨论】:

  • “断线”是什么意思?你的意思是一行只包含 \r\n 或 \n (取决于操作系统)?
  • BufferedReader 不会跳过空白行——我想知道您所看到的两个空白行是否真的是 CR LF?
  • 是的,我也建议使用 BufferedReader,我从来没有遇到过跳过空白行的问题。
  • InputStream 没有 readLine() 方法。你能发布你所有的代码吗?您希望在空行上阅读什么内容?
  • 同意@Ishtar:InputStream 处理的是字节而不是字符——因此没有“行”的概念,因为没有字符的概念,也没有“\r”的概念跨度>

标签: java newline break


【解决方案1】:

你的意思是?

while ((str = br.readLine())!= null && str.trim().length()>0) {
    System.out.println(str);
}

这将为您提供所有非空行。

【讨论】:

  • 这里不太确定,但我猜这只会给出第一行,直到读取空行。另外,它应该是 !str.trim().isEmpty()。
  • isEmpty() 如果你有 Java 6+ 就可以了。
【解决方案2】:

BufferedReader 将读取文件中的所有行,无论它们是否为空白。它将查找换行符:Windows 上的 LF+CR 和 GNU/Linux 上的 LF。根据 BufferedReader 文档:

一行被视为终止 通过换行符 ('\n') 中的任何一个,a 回车 ('\r') 或回车 return 紧接着是 换行。

所以,这取决于您的文本文件的真实外观。它是否真的在行之间有回车和换行,或者它只是以这种方式显示?您可以通过在十六进制编辑器中查看文件来找到这一点(LF 是 0x0A,CR 是 0x0D)。如果是这样,那么 BufferedReader 应该给你那些空行。

【讨论】:

    【解决方案3】:

    对不起,这是一个 BufferedReader 接收 InputStream。 BufferedReader 确实读取了每一行,包括下一行/换行/换行。问题在于我写的算法只是错过了下一行/换行/换行。很抱歉给您带来麻烦和麻烦。

    感谢大家的回答。

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2013-08-19
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多