前戲
今天同事小姐姐找我求助這麼一個問題;
Java中的replaceAll()方法怎麼才能同時替換多個不同的字符串呢?
正好我遇到過這個情況,就跟她分享了一下心得,解決問題後的她開心的像剛充完氣兒一樣。
這讓我頗感欣慰,在這裏我也分享給大家。
需求場景
場景1:
String str1 = "廣東省,福建省,北京市,海淀區,河北省,上海市,....";
需要把“省”、“市”、“區”一起去掉;
變成: 廣東,福建,北京,海淀,河北,上海....
場景2:
String str2 = "0*00*00//33?23?23/.....";
需要把多餘符號都去掉,如上述中的 “*”、“/”、“?” 一起去掉;
變成:00000332323
replaceAll原理:
在源碼中是這樣的(圖文一起提供):
/* 源碼:
* @param regex : 此字符串可以匹配正則表達式,也可以是一般字符
* @param replacement : 要替換成的字符串
*/
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
很顯然,這個替換的字符是支持正則的,那就好辦了~
解決方法
測試類:
public class demo {
public static void main(String[] args) {
// 同時替換多個文字
String str1 = "廣東省,福建省,北京市,海淀區,河北省,上海市";
str1 = str1.replaceAll("(?:省|市|區)", "");
System.out.println("替換多箇中文:" + str1);
// 同時替換多個字符
String str2 = "0*00*00//33?23?23/";
str2= str2.replaceAll("\\*|\\/|\\?","");
System.out.println("替換多個字符:" + str2);
}
}
打印內容:
替換多箇中文:廣東,福建,北京,海淀,河北,上海
替換多個字符:00000332323
Process finished with exit code 0
注意事項:
文字替換方式:str1 = str1.replaceAll("(?:省|市|區)", "");
多個不同字符,通過 “|” 符號隔開;
符號替換方式:str2= str2.replaceAll("\\*|\\/|\\?","");
注意了,符號替換與文字不同,需要用 “\\” 雙斜槓轉義。