String包含许多有用的方法,例如String.replace(CharSequence, CharSequence),StringBuilder完全缺少这些方法。有原因吗?
有没有一种简单的方法来实现这些方法,而没有每次复制字符串的StringBuilder.toString()调用的巨大开销?
答案 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中间的任何插入/删除都需要复制尾随数据)。