遇到問題:項目需要將以下字符串中特定的<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>。