我在这个惊人的教程here中发现了一个问题。
首先,这是代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexDemo {
private static String REGEX = "a*b";
private static String INPUT = "aabfooaabfooabfoob";
private static String REPLACE = "-";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb,REPLACE);
}
m.appendTail(sb);
System.out.println(sb.toString());
}
}
输出:-foo-foo-foo -
看到有关appendTail()方法的文档后:
实施终端追加和替换步骤。
此方法从附加位置开始读取输入序列中的字符,并将它们附加到给定的字符串缓冲区。它旨在在appendReplacement方法的一次或多次调用之后调用,以便复制输入序列的其余部分。
当我删除m.appendTail(sb);
我无法理解为什么要调用这个方法。我想它是隐含的。不是吗?