Java Matcher类appendReplacement和appendTail方法的区别
发布日期:2021-05-07 10:51:31 浏览次数:14 分类:技术文章

本文共 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中。

两个方法一起使用就可以达到所有替换或者替换第一个:

所有替换:

[java]  
  1. while(m.find()){  
  2.     m.appendReplacement(sb,replaceContext);  
  3. }  
  4. .appendTail(sb);  
替换第一个:

[java]  
  1. if (matcher.find()){  
  2.     matcher.appendReplacement(sb, replaceContext);  
  3. }  
  4. matcher.appendTail(sb);   
上一篇:MySQL基础篇(上,超详细)
下一篇:springboot整合sharding-jdbc实现按年分库按月分表

发表评论

最新留言

不错!
[***.144.177.141]2025年03月22日 22时03分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章