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