假如有个字符串为"fatcatfatcatfat",正则为“cat”
当调用appendReplacement(sb, "dog")时appendReplacement方法都会把匹配到的内容替换为dog,并把匹配到字符串的前面几个字符串+dog送给sb里,所以第一次输出fatdog
当第二次调用输出fatdogfatdog
// 创建正则表达式 String regex = "cat"; // 创建字符串 String input = "fatcatfatcatfat"; // 创建对象pattern 对象 Pattern pattern = Pattern.compile(regex); // 创建匹配match Matcher matcher = pattern.matcher(input); // 记录结果 StringBuffer sb = new StringBuffer(); // 第一次调用appendReplacement方法 // 每次调用appendReplacement方法都会把匹配到的内容替换为dog,并把匹配到字符串的前面几个字符串+dog送给sb里,所以第一次输出fatdog matcher.find(); matcher.appendReplacement(sb, "dog"); // 第二次调用appendReplacement方法 // 每次调用appendReplacement方法都会把匹配到的内容替换为dog,并把匹配到字符串的前面几个字符串+dog送给sb里,所以第二次输出fatdogfatdog matcher.find(); matcher.appendReplacement(sb, "dog"); // 再调用一次appendTail方法,会把匹配工作后剩余的字符串的加到sb中,所以第二次输出fatdogfatdogfat matcher.appendTail(sb); System.out.println(sb.toString());