基本上我有一个带有 <br>
的 HTML 片段和 <p></p>
里面。我能够删除所有 HTML 标签,但这样做会使文本格式错误。
我想要类似 nl2br()
的东西在 PHP 中除了反转输入和输出并且还考虑了 <p>
标签。在 Java 中有它的库吗?
最佳答案
您基本上需要更换每个 <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,但它有效。
关于java - 将中断和段落中断转换为java中的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3132257/