清理HTML字符串

时间:2014-12-30 04:54:16

标签: java android html replaceall

我有一个HTML sting:

<p dir="ltr"><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>bold</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>all</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>in</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u>one</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></p>

我想清理像<b><i><u> bold all in one </b></i></u>

这样的html

我尝试了这种方法:webText = webText.replaceAll("(</?(?:b|i|u)>)\\1+", "$1").replaceAll("</(b|i|u)><\\1>", "");

但这没用。 HTML仍然很笨拙。我该怎么做才能修补相同的内容?还有其他正则表达式或JSON方式吗?

2 个答案:

答案 0 :(得分:1)

  

但这没用。 HTML仍然很笨拙。我该怎么做才能修补   相同?还有其他正则表达式或JSON方式吗?

正则表达式可以在这里提供帮助,但一般情况下,如果事情变得复杂,它们的效果就不如Html解析器。 Jsoup是一个伟大的 Html库,我真的可以推荐它。

不幸的是你的html仍然是有效的html,所以解决方案很棘手。

最好从Jsoup documentation开始,尤其是其中一个Selector syntax

这是开始的事情:

final String html = ... // your html from above

// Parse the html string into a document
Document doc = Jsoup.parse(html, "", Parser.xmlParser());

/*
 * Select all elements, which ...
 * 
 *   (a) have a text (= at least not empty)
 *   (b) has no childs it's own
 * 
 * Iterate over those found and print them.
 */
for( Element element : doc.select("*:matches(^..+?$):not(:has(*))") )
{
    System.out.println(element);
}

<强>结果:

<u>bold</u>
<u>all</u>
<u>in</u>
<u>one</u>

如果您需要按字面意思<b><i><u> bold all in one </b></i></u>

final String html = ... // your html from above

// As above
Document doc = Jsoup.parse(html, "", Parser.xmlParser());

// All text of the document
String text = doc.text();

// Create an element and it's childs
Element element = new Element(Tag.valueOf("b"), "");
element.appendElement("i").appendElement("u").text(text);

System.out.println(element); 

<强>结果:

<b><i><u>bold all in one</u></i></b>

答案 1 :(得分:0)

您可以尝试以下方法删除不需要的html标记:

public String stripHtml(String html) 
{
    return Html.fromHtml(html).toString();
}