基本上我有一个内嵌<br>
和<p></p>
的HTML片段。我能够删除所有HTML标记,但这样做会使文本格式不正确。
除了反转输入和输出之外,我想在PHP中使用类似nl2br()
的内容,并且还考虑<p>
标记。 Java中是否有一个库?
答案 0 :(得分:12)
您基本上需要将每个<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()
是不必要的,因为我们只想在此处使用简单的charsequence-by-charsequence替换,而不是regexpattern-by-charsequence replacement)
输出:
<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,但它确实有效。
答案 1 :(得分:3)
br2nl
和p2nl
并不太复杂。试一试:
String plain = htmlText.replaceAll("<br>","\\n").replaceAll("<p>","\\n\\n").replaceAll("</p>","");
答案 2 :(得分:1)
您应该可以使用replaceAll。有关示例,请参阅http://www.rgagnon.com/javadetails/java-0454.html。其中只有2个,一个用于p,一个用于br。示例是另一种方式,但您可以更改它以使用斜杠n
替换html