我正在使用Scala将文件写入磁盘。
为了创建将写入文件的整个字符串,我目前正在迭代我的数据,并将所有信息附加到StringBuilder对象。
例如:
val moreData = getMoreData
strBuilder.append(moreData)
strBuilder.append("even more data")
//...
strBuilder.toString
在操作结束时,我调用StringBuilder的toString方法,并写入路径。
我知道Scala对Strings有编译优化,所以我的问题是:
哪种方法的性能更好。字符串插值连接还是StringBuilder?
这些编译优化是否与StringBuilder有关?换句话说,StringBuilder追加操作是否有优化?
连接多个字符串的最有效方法是使用StringBuilder
。
但是你的任务不是串连接。将多个字符串写入文件的最有效方法是使用好的旧java的FileWriter
和BufferedWriter
:
val fw = new FileWriter("foo.out")
val bw = new BufferedWriter(fw)
strings.foreach {
s =>
bw.write(s)
}
bw.close()
fw.close()
如果需要格式化功能,可以选择使用PrintWriter
包装BufferedWriter
。
当然,如果您更喜欢性能而不是代码大小,以上所有内容都是正确的。
字符串插值串联使用StringBuilder
生成结果。可以对字符串插值进行更多优化,但目前它主要是为表达能力而设计的,而不是性能。如果您知道字符串创建将受到限制,那么应该使用StringBuilder
,这样做并不难。如果你不知道,或者你知道这不是一个主要问题,字符串插值通常更容易阅读,所以在大多数情况下你应该更喜欢它。
本文向大家介绍字符串拼接有哪些方式?哪种性能好?相关面试题,主要包含被问及字符串拼接有哪些方式?哪种性能好?时的应答技巧和注意事项,需要的朋友参考一下 性能最好的是连接: 继续补充:
问题内容: 我有一些仅由数字组成的,并且我想在字符更改时将其拆分。 例如: 前往: 去 去 去 去 去 我想要一个好方法。 我知道两种解决方法:仅是强行强制执行,或者逐节添加。或者,我可以删除所有0并替换为0,然后在字符更改时添加0,然后对0进行拆分,但是这两种方式都显得很愚蠢。如果有人对更好/更美的方法,正则表达式或逻辑有任何想法,那就太好了。 问题答案: 这似乎像您期望的那样工作 测试: 输出
问题 你想创建一个字符串,让它包含体现某个 CoffeeScript 变量的文本。 解决方案 使用 CoffeeScript 中类似 Ruby 的字符串插值,而不是 JavaScript 的字符串拼接。 插值: muppet = "Beeker" favorite = "My favorite muppet is #{muppet}!" # => "My favorite muppet is B
备选方案2: 哪一个性能更好?
问题内容: 在传递多个字符串进行记录时,最好使用varargs或字符串连接吗? 在生产环境中将禁用日志记录。 考虑以下代码, VS. 哪一个在两种情况下都表现良好(启用/禁用)? 问题答案: 这些都不是特别好。varargs会更好地执行,因为它不进行连接,这比数组创建要昂贵得多,但是由于您使用的是varargs而不是varargs,因此 即使在生产环境中* ,也必须在所有对象上调用该方法,会比较贵
问题内容: 在Java和C#之类的语言中,字符串是不可变的,并且一次建立一个字符的字符串在计算上是昂贵的。在上述语言中,有一些库类可以降低这种成本,例如C#和Java 。 php(4或5;我对两者都感兴趣)是否都共享此限制?如果是这样,是否有类似的解决方案? 问题答案: 不,在PHP中没有stringbuilder类的类型,因为字符串是可变的。 话虽如此,根据您在做什么,有不同的方式来构建字符串。