【问题标题】:How to output formatted html in java如何在java中输出格式化的html
【发布时间】:2011-02-20 20:48:44
【问题描述】:
我正在阅读这样的 html 文件:
try {
BufferedReader bufferReader = new BufferedReader(new FileReader(path));
String content;
while((content = bufferReader.readLine()) != null) {
result += content;
}
bufferReader.close();
} catch (Exception e) {
return e.getMessage();
}
我想在 GWT textArea 中显示它,我将它作为字符串提供给它。但是该字符串失去了缩进,并以单行文本的形式出现。有没有办法以正确的格式显示它(带有缩进)?
【问题讨论】:
标签:
java
html
parsing
gwt
indentation
【解决方案1】:
这可能是因为readLine() 删除了行尾字符。为每一行重新添加它们。
除此之外,在循环中使用StringBuilder 而不是使用+= 到String:
try {
BufferedReader bufferReader = new BufferedReader(new FileReader(path));
StringBuilder sb = new StringBuilder();
String content;
while ((content = bufferReader.readLine()) != null) {
sb.append(content);
sb.append('\n'); // Add line separator
}
bufferReader.close();
} catch (Exception e) {
return e.getMessage();
}
String result = sb.toString();
【解决方案2】:
好吧,假设你的 textArea 理解 HTML(我不具体了解 GWT),你为什么不在它前面加上 <pre> 然后附加 </pre>?
您可能仍需要将所有 HTML 特殊字符(例如 &amp; 转义为 &amp; 和 &lt; 转义为 &lt;。
【解决方案3】:
改用 FileReader 可能更有效——没有理由必须逐行阅读文本。就像 Jesper 建议的那样,使用 StringBuilder 来构建您的 String 更有效。此外,使用 FileReader,您不必手动附加任何换行符:
StringBuilder sb = new StringBuilder();
FileReader in = null;
try {
in = new FileReader(path);
int read;
char buf[] = new char[4096];
while ((read = in.read(buf)) != -1) {
sb.append(buf, 0, read);
}
} catch (Exception e) {
return e.getMessage();
} finally {
in.close();
}
String result = sb.toString();
【解决方案4】:
如果您的 HTML 恰好是 XHTML,那么您可以尝试将它放入 XML 解析器,例如 jdom 或 dom4j,它通常具有一些“漂亮打印”选项。