在android中的html字符串中添加一个新的html标记

时间:2014-10-29 07:15:33

标签: java android html regex jsoup

我有一个从EditText获得的字符串。该字符串包含html标签。

Spannable s  = mainEditText.getText();
String webText = Html.toHtml(s); 

字符串的内容是:

<p dir="ltr">test</p> 
<p dir="ltr"><img src="http://files.parsetfss.com/bcff7108-cbce-4ab8-b5d1-1f82827e6519/tfss-0de7a730-3fa9-4a1e-9f82-d34e4f6e2d31-file" /><br /></p> 
<p dir="ltr"><a href="22.572646,88.363895"><img src="http://maps.google.com/maps/api/staticmap?center=22.572646,88.363895&zoom=15&size=960x540&sensor=false&markers=color:blue%7Clabel:!%7C22.572646,88.363895" /></a><br /> </p>

现在,我想要做的是,只要有img src标签,我就想在它前面添加一个中心标签。

如何获得以下输出?

<p dir="ltr">test</p> 
<p dir="ltr"><center><img src="http://files.parsetfss.com/bcff7108-cbce-4ab8-b5d1-1f82827e6519/tfss-0de7a730-3fa9-4a1e-9f82-d34e4f6e2d31-file" /></center><br /></p> 
<p dir="ltr"><a href="22.572646,88.363895"><center><img src="http://maps.google.com/maps/api/staticmap?center=22.572646,88.363895&zoom=15&size=960x540&sensor=false&markers=color:blue%7Clabel:!%7C22.572646,88.363895" /></center></a><br /> </p> 

正则表达式可以解决问题还是应该以不同的方式完成?

JSOUP能以任何方式提供帮助吗?是否有其他类型的HTML解析器可以完成这项工作?

4 个答案:

答案 0 :(得分:1)

(<img\s+[^>]*>)

您可以尝试使用<center>$1</centre>替换。请参阅演示。

http://regex101.com/r/sU3fA2/38

这样的东西
var re = /(<img\s+[^>]*>)/g;
var str = '<p dir="ltr">test</p> \n<p dir="ltr"><img src="http://files.parsetfss.com/bcff7108-cbce-4ab8-b5d1-1f82827e6519/tfss-0de7a730-3fa9-4a1e-9f82-d34e4f6e2d31-file" /><br /></p> \n<p dir="ltr"><a href="22.572646,88.363895"><img src="http://maps.google.com/maps/api/staticmap?center=22.572646,88.363895&zoom=15&size=960x540&sensor=false&markers=color:blue%7Clabel:!%7C22.572646,88.363895" /></a><br /> </p>';
var subst = '<center>$1</centre>';

var result = str.replace(re, subst);

答案 1 :(得分:1)

通过使用Jsoup,您可以使用Element类Jsoup的wrap()方法。

看起来像这样:

public String wrapImgWithCenter(String html) {
    Document doc = Jsoup.parse(html);
    doc.getElementsByTag("img").wrap("<center></center>");
    return doc.html();
}

答案 2 :(得分:1)

我实施了mourphy建议的JSOUP解决方案。但是,我已经编辑了一点方法,它为我创造了奇迹。新方法是:

public String wrapImgWithCenter(String html){
     Document doc = Jsoup.parse(html);
        doc.select("img").wrap("<center></center>");
        return doc.html();
}

感谢mourphy和vks的帮助!

答案 3 :(得分:0)

使用Regex,您也可以在java中执行此操作:

String formatted = str.replaceAll("(<img\\s+[^>]*>)", "<center>$1</center>");