public Matcher appendReplacement(StringBuffer sb, String replacement)
这里为什么appenedReplacement()
方法应该使用Buffer对象以及为什么我们不使用输入
字符串而不是它?
答案 0 :(得分:1)
如果您传递String
而不是StringBuffer
并对其执行追加操作,那么要获得必须重新生成该字符串的结果,因为String是不可变的,因此对其执行的任何操作都会创建新的String和调用appenedReplacement()
的方法将旧实际字符串的引用加入。
StringBuffer
为您提供了在不更改引用的情况下附加字符串的功能。因此,即使您不追溯结果String
,对StringBuffer执行的任何操作仍然存在。
答案 1 :(得分:1)
appendReplacement()
方法执行以下操作:
它从输入序列中读取字符,从附加开始 position,并将它们附加到给定的字符串缓冲区。它停止了 读取上一场比赛前的最后一个字符,即 index start() - 1处的字符。
它将给定的替换字符串附加到字符串缓冲区。
它将此匹配器的追加位置设置为最后一个的索引 字符匹配,加一,即结束()。
此方法旨在与循环一起使用 appendTail和find方法。例如,下面的代码写道 一只狗两只狗在院子里到标准输出流:
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
由于String
类没有任何append()
函数,因此在StringBuffer
函数中使用了appendReplacement()
。