【问题标题】:convert breaks and paragraph breaks into new line in java在java中将换行符和段落换行符转换为新行
【发布时间】:2011-03-09 02:48:39
【问题描述】:

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

我想要 PHP 中的 nl2br() 之类的东西,除了反转输入和输出,还考虑到 <p> 标签。 Java 中是否有它的库?

【问题讨论】:

标签: java newline line-breaks


【解决方案1】:

您基本上需要将每个<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,但它有效。

【讨论】:

    【解决方案2】:

    br2nlp2nl 并不太复杂。试试这个:

    String plain = htmlText.replaceAll("<br>","\\n").replaceAll("<p>","\\n\\n").replaceAll("</p>","");
    

    【讨论】:

    • @BalusC ... 是的,在“现实”中,一个人会使用 html 解析器并在将文本提取到 StringBuilder 时添加 line.separators ;) 我有感觉,OP 使用了一种捷径;)
    【解决方案3】:

    您应该能够使用replaceAll。有关示例,请参阅http://www.rgagnon.com/javadetails/java-0454.html。只有 2 个,一个用于 p,一个用于 br。该示例是另一种方式,但您可以更改它以用斜杠替换 html n

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2014-02-23
      相关资源
      最近更新 更多