【发布时间】:2011-03-09 02:48:39
【问题描述】:
基本上我有一个带有<br> 和<p></p> 的HTML 片段。我能够删除所有 HTML 标记,但这样做会使文本格式错误。
我想要 PHP 中的 nl2br() 之类的东西,除了反转输入和输出,还考虑到 <p> 标签。 Java 中是否有它的库?
【问题讨论】:
标签: java newline line-breaks
基本上我有一个带有<br> 和<p></p> 的HTML 片段。我能够删除所有 HTML 标记,但这样做会使文本格式错误。
我想要 PHP 中的 nl2br() 之类的东西,除了反转输入和输出,还考虑到 <p> 标签。 Java 中是否有它的库?
【问题讨论】:
标签: java newline line-breaks
您基本上需要将每个<br> 替换为\n,并将每个<p> 替换为\n\n。所以,在你成功移除它们的地方,你需要分别插入\n和\n\n。
这是一个借助 Jsoup HTML 解析器的启动示例(HTML 示例是故意这样编写的,因此即使不是几乎不可能使用正则表达式也很难)。
public static void main(String[] args) throws Exception {
String originalHtml = "<p>p1l1<br/><!--</p>-->p1l2<br><!--<p>--></br><p id=p>p2l1<br class=b>p2l2</p>";
String text = br2nl(originalHtml);
String newHtml = nl2br(text);
System.out.println("-------------");
System.out.println(text);
System.out.println("-------------");
System.out.println(newHtml);
}
public static String br2nl(String html) {
Document document = Jsoup.parse(html);
document.select("br").append("\\n");
document.select("p").prepend("\\n\\n");
return document.text().replace("\\n", "\n");
}
public static String nl2br(String text) {
return text.replace("\n\n", "<p>").replace("\n", "<br>");
}
(注意:replaceAll() 是不必要的,因为我们只需要一个简单的字符序列替换,而不是正则表达式替换)
输出:
<p>p1l1<br/><!--</p>-->p1l2<br><!--<p>--></br><p id=p>p2l1<br class=b>p2l2</p>
-------------
p1l1
p1l2
p2l1
p2l2
-------------
<p>p1l1 <br>p1l2 <br> <br> <p>p2l1 <br>p2l2
有点hacky,但它有效。
【讨论】:
br2nl 和 p2nl 并不太复杂。试试这个:
String plain = htmlText.replaceAll("<br>","\\n").replaceAll("<p>","\\n\\n").replaceAll("</p>","");
【讨论】:
您应该能够使用replaceAll。有关示例,请参阅http://www.rgagnon.com/javadetails/java-0454.html。只有 2 个,一个用于 p,一个用于 br。该示例是另一种方式,但您可以更改它以用斜杠替换 html n
【讨论】: