将break和段落转换为java中的新行

时间:2010-06-28 12:18:51

标签: java newline line-breaks

基本上我有一个内嵌<br><p></p>的HTML片段。我能够删除所有HTML标记,但这样做会使文本格式不正确。

除了反转输入和输出之外,我想在PHP中使用类似nl2br()的内容,并且还考虑<p>标记。 Java中是否有一个库?

3 个答案:

答案 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)

br2nlp2nl并不太复杂。试一试:

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