如何用String实现StringBuilder.replace(String,String)?

时间:2009-09-14 15:47:49

标签: java string

String包含许多有用的方法,例如String.replace(CharSequence, CharSequence)StringBuilder完全缺少这些方法。有原因吗?

有没有一种简单的方法来实现这些方法,而没有每次复制字符串的StringBuilder.toString()调用的巨大开销?

2 个答案:

答案 0 :(得分:4)

由于StringBuilder同时提供indexOf(String,int)replace(int,int,String),因此可以轻松地重现功能。这里唯一的缺点是参数不能是任何CharSequence个对象,但必须是String

当处理巨大的类似字符串的对象并进行大量替换操作时,可以使用像Ropes for Java这样的专用API。

答案 1 :(得分:0)

好吧,Pattern.matcher()接受CharSequence,因此您可以对原始构建器执行匹配操作,而无需将其复制到新String。

对于替换,如果它是非平凡的(不是相同的长度文本),你很可能想要复制到新的StringBuilder(就像使用匹配器进行搜索/替换时那样)。否则,您最终可能会在原始StringBuilder中多次重复复制数据(因为在StringBuilder中间的任何插入/删除都需要复制尾随数据)。