【问题标题】:Android - reading local html as text file: differences between using InputStreamReader.read and BufferedReader.readLineAndroid - 将本地 html 读取为文本文件:使用 InputStreamReader.read 和 BufferedReader.readLine 之间的区别
【发布时间】:2012-05-08 00:57:52
【问题描述】:

我必须将 html 作为文本文件读取,并且我已经实现了两种不同的方法,如 SO 线程中所述。我清理了 html,只留下了正文内容,使用 document.write(string) 将其放入 DOM 中,这两种方法都有,但只有在我使用 Bufferedreader.readLine() 时它才有效(在循环中附加一个 stringBuilder)。事实上,如果我在 Logcat 窗口中打印 stringBuilder.toString() 我会看到当使用 BufferedReader.readLine() 时 stringBuilder 在 Logcat 窗口中显示在单行上,而使用 InputStreamReader.read(charArray,0, (int)numBytes) 它显示多行(我使用的是真实设备)。也许这可能是相关的,并提出了问题所在。我的问题是:如何清理或处理 read(charArray,0,(int)numBytes) 读取的 char 数组与 readLine() 循环中附加的 stringBuilder 相同?

【问题讨论】:

  • 您知道BufferedReader#readLine() 在返回行时不包含行终止符吗?这就是导致您获得“单行”logcat 输出的原因 - 实际上,您正在使用此方法剥离 \n(和 \r)字符的 HTML。如果您包含任何
     部分或类似样式,这将导致您的 HTML 呈现不正确。
  • 感谢您的重要建议,我想我必须再问一个问题。

标签: android text inputstream innerhtml bufferedreader


【解决方案1】:

BufferedReader.readLine() 方法读取到行尾并返回值不包括换行符。因此,当您将其附加到 StringBuffer 时,所有内容都会附加到一行。但是InputStreamReader.read的情况下,也包含换行符,导致字符串多行显示。

为了使行为相似,您必须在使用 InputStreamReader.read 时跳过换行符。

【讨论】:

  • 如何处理 StringBuilder 以撕下换行符(一个或两个字符?什么字符?ASCII 13+10 或 10+13?只有 10 个?)
  • 取决于您阅读的文件。一般而言,您可以替换所有出现的“\n”、“\r”或“\r\n”。使用String.replace方法达到效果。
  • 谁对此话题感兴趣,请注意,阅读 Jens 的建议作为对我的问题的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2016-08-04
  • 1970-01-01
  • 2012-08-07
相关资源
最近更新 更多