use*_*954 5 java newline line-breaks
基本上我有一个HTML片段<br>和<p></p>里面.我能够删除所有HTML标记,但这样做会使文本格式不正确.
nl2br()除了反转输入和输出之外,我想要像PHP 这样的东西,并且还考虑了<p>标签.Java中是否有一个库?
Bal*_*usC 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>");
}
Run Code Online (Sandbox Code Playgroud)
(注意: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
Run Code Online (Sandbox Code Playgroud)
有点hacky,但它的工作原理.