博客
关于我
Java Matcher类appendReplacement和appendTail方法的区别
阅读量:337 次
发布时间:2019-03-04

本文共 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);   
你可能感兴趣的文章