本文共 1362 字,大约阅读时间需要 4 分钟。
public static void main(String[] args) { String str = "测试替换手机号15212793109哇哈哈18909801234欧米茄"; System.out.println("<<
/** * 隐藏并替换字符串中所有的手机号 * @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中。
两个方法一起使用就可以达到所有替换或者替换第一个:
所有替换: