替换字符串中特定的标签(包含标签中的文本内容)

遇到问题:项目需要将以下字符串中特定的<span class=\"item-blank\">xxxxx</span>标签,替换为<span qid="xxxxxxxxx_sub_i"></span>标签。

String text = "<p>2019年<span class=\"item-blank\">1.</span>&nbsp;月20日-&nbsp;<span class=\"item-blank\">2.</span>"
+"&nbsp;拖拽题<span class=\"item-blank\">ceshi</span>&nbsp;拖拽题<span class=\"item-blank\"></span>"
+"&nbsp;拖拽题<span class=\"item-blank\"></span>&nbsp;</p>";

 需要注意的是,当前字符串中出现多个<span>标签,替换时需要逐个替换,避免将字符串错误识别为第一个<span>开头和最后一个</span>的闭合,导致中间的多个<span>被忽略。

这里要引入正则表达式:       ([\\s\\S]*?)      该表达式可以匹配所有字符。

以下是项目中的用法:

int i = 0;
while (text.contains("<span class=\"item-blank\">")) {
    i++;
    String aString = "<span class=\"item-blank\">([\\s\\S]*?)</span>";
    String bString = "<span qid='"+"xxxxxxxxxxxxxxxxxx"+"_sub_"+i+"'></span>";
    text = text.replaceFirst(aString, bString);
    System.out.println(text);
}
System.out.println("最终结果:"+text);

代码执行结果为:

<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span class="item-blank">2.</span>&nbsp;拖拽题<span class="item-blank">ceshi</span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;</p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span>&nbsp;拖拽题<span class="item-blank">ceshi</span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;</p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;</p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span>&nbsp;拖拽题<span class="item-blank"></span>&nbsp;</p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_5'></span>&nbsp;</p>
最终结果:<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span>&nbsp;月04日-&nbsp;<span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span>&nbsp;拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_5'></span>&nbsp;</p>

注意:正则表达式中的“?”号,表示匹配当前离<span class=\"item-blank\">最近的</span>,而不是字符串末尾的</span>。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章