在Matcher类的appendReplaccement()方法中使用缓冲区对象

时间:2014-01-14 07:26:08

标签: java regex

public Matcher appendReplacement(StringBuffer sb, String replacement)

这里为什么appenedReplacement()方法应该使用Buffer对象以及为什么我们不使用输入 字符串而不是它?

2 个答案:

答案 0 :(得分:1)

如果您传递String而不是StringBuffer并对其执行追加操作,那么要获得必须重新生成该字符串的结果,因为String是不可变的,因此对其执行的任何操作都会创建新的String和调用appenedReplacement()的方法将旧实际字符串的引用加入。

StringBuffer为您提供了在不更改引用的情况下附加字符串的功能。因此,即使您不追溯结果String,对StringBuffer执行的任何操作仍然存在。

Matcher
StringBuffer
String

答案 1 :(得分:1)

appendReplacement()方法执行以下操作:

  

它从输入序列中读取字符,从附加开始   position,并将它们附加到给定的字符串缓冲区。它停止了   读取上一场比赛前的最后一个字符,即   index start() - 1处的字符。

     

它将给定的替换字符串附加到字符串缓冲区。

     

它将此匹配器的追加位置设置为最后一个的索引   字符匹配,加一,即结束()。

Matcher

  

此方法旨在与循环一起使用   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()