替換字符串中特定的標籤(包含標籤中的文本內容)

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

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