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

标签 java newline line-breaks

基本上我有一个带有 <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/

相关文章:

Windows 和 Linux 上的 PHP_EOL

Java - 使用递归一次打印一个字符

java - 大 O 符号用于访问链表和二进制搜索中的中间元素?

java - 如何将类名传递给抽象父类(super class)构造函数?

PHP CLI、Windows 7 CMD 和 CLS/FF 需要和谐相处。 (从 CLI 使用 PHP 清除 Win7 CMD)

html - 如何使用css实现与目标元素内有 <br> 相同的效果?

jQuery text() 函数在 IE 中丢失换行符

javascript:去除输入字符串上的换行符

java - 检查 url 当前是否已加载到 android/java 中

没有堆栈的 Java "Thread-2"会阻止终止