如果必须使用String.Replace()替换测试50次,则基本上必须创建一个新字符串50次。 StringBuilder.Replace()是否更有效地执行此操作?例如,如果我要替换大量文本,我是否应该使用StringBuilder,即使我不会向其添加任何数据?
我正在使用.NET,但我认为这与Java和其他语言可能相同。
答案 0 :(得分:29)
这正是StringBuilder的用途 - 重复修改同一个文本对象 - 它不仅仅用于重复连接,尽管它似乎是最常用的。
答案 1 :(得分:8)
取决于替换的大小是larger than the string replaced.
StringBuilder over分配其缓冲区,而字符串只保存其中包含多少个字符。
StringBuilder.Capacity属性是缓冲区将保存的字符数,而StringBuilder.Length是使用的字符数。
通常,您应将StringBuilder.Capacity设置为大于预期结果字符串的值。否则,StringBuilder将需要重新分配其缓冲区。 当StringBuilder重新分配其缓冲区时,它会将其大小加倍,这意味着在重新分配几次后,它可能会大得多,默认情况下容量从16开始。
通过在启动时设置Capacity值(例如在构造函数中),可以保存StringBuilder缓冲区的重新分配。您可以使用StringBuilder.MaxCapacity来限制StringBuilder可以扩展到的最大容量。
答案 2 :(得分:5)
是的,确实如此。 String.Replace
始终会创建一个新字符串 - StringBuilder.Replace
不会。