遇到问题:项目需要将以下字符串中特定的<span class=\"item-blank\">xxxxx</span>标签,替换为<span qid="xxxxxxxxx_sub_i"></span>标签。
String text = "<p>2019年<span class=\"item-blank\">1.</span> 月20日- <span class=\"item-blank\">2.</span>"
+" 拖拽题<span class=\"item-blank\">ceshi</span> 拖拽题<span class=\"item-blank\"></span>"
+" 拖拽题<span class=\"item-blank\"></span> </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> 月04日- <span class="item-blank">2.</span> 拖拽题<span class="item-blank">ceshi</span> 拖拽题<span class="item-blank"></span> 拖拽题<span class="item-blank"></span> </p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span> 月04日- <span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span> 拖拽题<span class="item-blank">ceshi</span> 拖拽题<span class="item-blank"></span> 拖拽题<span class="item-blank"></span> </p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span> 月04日- <span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span> 拖拽题<span class="item-blank"></span> 拖拽题<span class="item-blank"></span> </p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span> 月04日- <span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span> 拖拽题<span class="item-blank"></span> </p>
<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span> 月04日- <span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_5'></span> </p>
最终结果:<p>2019年<span qid='xxxxxxxxxxxxxxxxxx_sub_1'></span> 月04日- <span qid='xxxxxxxxxxxxxxxxxx_sub_2'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_3'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_4'></span> 拖拽题<span qid='xxxxxxxxxxxxxxxxxx_sub_5'></span> </p>
注意:正则表达式中的“?”号,表示匹配当前离<span class=\"item-blank\">最近的</span>,而不是字符串末尾的</span>。