如何解决在Dart中连接字符串的最有效方法是什么?
类似于Java的语言,可让您使用'+'运算符来连接字符串。
但是由于字符串是不可变的,因此如果要重复连接字符串,他们建议使用StringBuilder来提高效率。
在Dart中连接字符串的最有效方法是什么?
https://api.dart.dev/stable/2.9.1/dart-core/StringBuffer-class.html
StringBuffer can be used for concatenating strings efficiently.
Allows for the incremental building of a string using write*() methods. The strings are concatenated to a single string only when toString is called.
如果使用StringBuffer似乎会推迟性能下降,直到调用toString?
解决方法
有多种方式连接字符串:
-
String.operator +
:string1 + string2
。这是最直接的。但是,如果需要连接很多字符串,则重复使用+
将创建很多临时对象,这是低效的。 (还请注意,与其他串联方法不同,如果两个参数之一为+
,null
都会引发异常。) -
字符串插值:
'$string1$string2'
。如果您需要连接一个预先固定的 fixed 个字符串(这样您就可以使用一个插值字符串),我希望这样做是相当有效的。但是,如果您需要逐步构建字符串,则效率与+
相同。 -
StringBuffer
。如果您需要连接很多字符串,这将非常有效。 -
Iterable.join
:[string1,string2].join()
。这在内部使用StringBuffer
,因此等效。
如果需要连接少量固定数目的字符串,我将使用字符串插值。与使用+
相比,它通常更具可读性,尤其是在涉及字符串文字的情况下。在这种情况下使用StringBuffer
会增加一些不必要的开销。
这是我的理解:
根据您的使用情况,性能似乎会有所不同。如果您使用StringBuffer并打算连接一个很大的字符串,那么由于只有在调用toString时才发生串联,因此此时您将获得“性能提升”。
但是,如果您使用“ +”,则每次调用“ +”都会对性能产生影响。由于字符串是不可变的,因此每次将两个字符串连接在一起时,都会创建一个需要进行垃圾收集的新对象。
因此,答案似乎是针对您的情况进行测试,并确定哪个选项有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。