当前位置:  开发笔记 > 编程语言 > 正文

StringBuilder.Replace()比String.Replace更有效吗?

如何解决《StringBuilder.Replace()比String.Replace更有效吗?》经验,为你挑选了3个好方法。

如果必须使用String.Replace()替换测试50次,则基本上必须创建一个新字符串50次.StringBuilder.Replace()是否更有效地执行此操作?例如,如果我要替换大量文本,我是否应该使用StringBuilder,即使我不会向其添加任何数据?

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



1> Michael Burr..:

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



2> VonC..:

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

StringBuilder over分配它的缓冲区,而一个字符串只保存其中有多少个字符.

StringBuilder.Capacity属性是缓冲区将保存的字符数,而StringBuilder.Length是使用的字符数.

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

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



3> Konrad Rudol..:

是的.String.Replace总是创建一个新的字符串 - StringBuilder.Replace没有.


@Avi:"不"是指"`String.Replace`*总是*创建一个新的字符串",注意强调"总是".
这不完全正确,请看源代码.StringBuilder.replace()调用AbstractStringBuilder.replace(),如果需要,它调用AbstractStringBuilder.expandCapacity().AbstractStringBuilder.expandCapacity()调用Arrays.copyOf(),它创建一个新的字符数组 - 这与创建一个新字符串相同.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有