【问题标题】:Add a new html tag to an html string in android在android中的html字符串中添加一个新的html标签
【发布时间】:2014-12-24 19:40:06
【问题描述】:

我有一个从 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 解析器可以完成这项工作?

【问题讨论】:

    标签: java android html regex jsoup


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我实现了mourphy 建议的 JSOUP 解决方案。但是,我稍微修改了这个方法,它为我创造了奇迹。新方法是:

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

      感谢 mourphy 和 vks 的帮助!

      【讨论】:

        【解决方案3】:

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

        看起来像这样:

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

        【讨论】:

        【解决方案4】:
        (<img\s+[^>]*>)
        

        你可以试试这个。替换为&lt;center&gt;$1&lt;/centre&gt;。查看演示。

        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);
        

        【讨论】:

        • 无法正确理解演示。你能告诉我一个java代码或者告诉我如何使用在线正则表达式测试器吗?
        • 谢谢,看到了输出。我可以看到中心标签开始,但它没有结束标签............可以做些什么吗?
        • webText = webText.replaceAll("(?=");正在删除更接近的 img 标签............输出是

          huh

          files.parsetfss.com/bcff7108-cbce-4ab8-b5d1-1f82827e6519/…> 可以看到img标签的右斜杠“/”也不见了
        • 正则表达式给出一个错误,提示 java 中的无效转义序列
        • 输出有额外的 p 标签和中心标签错位

          再次测试

          files.parsetfss.com/bcff7108-cbce-4ab8-b5d1-1f82827e6519/…" />

          maps.google.com/maps/api/…" / >

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        相关资源
        最近更新 更多