30

如果您必须使用 String.Replace() 替换 test 50 次,那么您实际上必须创建一个新字符串 50 次。StringBuilder.Replace() 这样做更有效吗?例如,如果我要替换大量文本,我是否应该使用 StringBuilder,即使我不会向它附加任何数据?

我正在使用 .NET,但我认为这与 Java 和可能的其他语言相同。

4

3 回答 3

30

这正是 StringBuilder 的用途——重复修改同一个文本对象——它不仅用于重复连接,尽管这似乎是它最常用的用途。

于 2008-11-13T18:58:13.427 回答
9

这取决于替换的大小是否大于替换的字符串。

StringBuilder过度分配其缓冲区,而字符串只保存其中的字符数。

StringBuilder.Capacity 属性是缓冲区将容纳多少个字符,而 StringBuilder.Length 是正在使用的字符数。

通常,您应该将 StringBuilder.Capacity 设置为大于预期结果字符串的值。否则 StringBuilder 将需要重新分配其缓冲区。当 StringBuilder 重新分配它的缓冲区时,它的 size 会加倍,这意味着在几次重新分配之后,它可能会比它需要的大得多,默认容量从 16 开始。

通过在启动时设置容量值(例如在构造函数中),您可以保存 StringBuilder 缓冲区的重新分配。您可以使用 StringBuilder.MaxCapacity 来限制 StringBuilder 可以扩展到的最大容量。

于 2008-11-13T18:58:42.490 回答
6

是的。String.Replace总是创建一个新字符串——StringBuilder.Replace不会。

于 2008-11-13T18:51:09.010 回答