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