Java Matcher類appendReplacement和appendTail方法的區別
阿新 • • 發佈:2019-01-23
public static void main(String[] args) {
String str = "測試替換手機號15212793109哇哈哈18909801234歐米茄";
System.out.println("<<<替換前:"+str);
str = hideAllPhoneNum(str);
System.out.println("<<<替換後:"+str);
}
/**
* 隱藏並替換字串中所有的手機號
* @param contentStr
* @return
*/
public static String hideAllPhoneNum(String contentStr){
Pattern pattern =Pattern.compile("((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}");
Matcher matcher = pattern.matcher(contentStr);
StringBuffer sb = new StringBuffer();
try {
while(matcher.find()) {
String phoneStr = matcher.group();
phoneStr = phoneStr.substring(0, 3) + "****" + phoneStr.substring(7, phoneStr.length());
matcher.appendReplacement(sb,phoneStr);
}
System.out.println("執行appendTail前:"+sb.toString());
matcher.appendTail(sb);
System.out.println("執行appendTail後:"+sb.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
return sb.toString();
}
執行結果:
appendReplacement方法:sb是一個StringBuffer,replaceContext待替換的字串,這個方法會把匹配到的內容替換為replaceContext,並且把從上次替換的位置到這次替換位置之間的字串也拿到,然後,加上這次替換後的結果一起追加到StringBuffer裡(假如這次替換是第一次替換,那就是隻追加替換後的字串啦)。
appendTail方法:sb是一個StringBuffer,這個方法是把最後一次匹配到內容之後的字串追加到StringBuffer中。
兩個方法一起使用就可以達到所有替換或者替換第一個:
所有替換:
- while(m.find()){
- m.appendReplacement(sb,replaceContext);
- }
- .appendTail(sb);
- if (matcher.find()){
- matcher.appendReplacement(sb, replaceContext);
- }
- matcher.appendTail(sb);