当前位置: 首页 > 知识库问答 >
问题:

哪种解决方案性能更好:StringBuilder还是字符串插值串联

商池暝
2023-03-14

我正在使用Scala将文件写入磁盘。

为了创建将写入文件的整个字符串,我目前正在迭代我的数据,并将所有信息附加到StringBuilder对象。

例如:

val moreData = getMoreData
strBuilder.append(moreData)
strBuilder.append("even more data")
//...
strBuilder.toString

在操作结束时,我调用StringBuilder的toString方法,并写入路径。

我知道Scala对Strings有编译优化,所以我的问题是:

哪种方法的性能更好。字符串插值连接还是StringBuilder?

这些编译优化是否与StringBuilder有关?换句话说,StringBuilder追加操作是否有优化?

共有2个答案

龚勇锐
2023-03-14

连接多个字符串的最有效方法是使用StringBuilder

但是你的任务不是串连接。将多个字符串写入文件的最有效方法是使用好的旧java的FileWriterBufferedWriter

val fw = new FileWriter("foo.out")
val bw = new BufferedWriter(fw)

strings.foreach {
  s =>
    bw.write(s)
}

bw.close()
fw.close()

如果需要格式化功能,可以选择使用PrintWriter包装BufferedWriter

当然,如果您更喜欢性能而不是代码大小,以上所有内容都是正确的。

常博裕
2023-03-14

字符串插值串联使用StringBuilder生成结果。可以对字符串插值进行更多优化,但目前它主要是为表达能力而设计的,而不是性能。如果您知道字符串创建将受到限制,那么应该使用StringBuilder,这样做并不难。如果你不知道,或者你知道这不是一个主要问题,字符串插值通常更容易阅读,所以在大多数情况下你应该更喜欢它。

 类似资料:
  • 本文向大家介绍字符串拼接有哪些方式?哪种性能好?相关面试题,主要包含被问及字符串拼接有哪些方式?哪种性能好?时的应答技巧和注意事项,需要的朋友参考一下 性能最好的是连接: 继续补充:

  • 问题内容: 我有一些仅由数字组成的,并且我想在字符更改时将其拆分。 例如: 前往: 去 去 去 去 去 我想要一个好方法。 我知道两种解决方法:仅是强行强制执行,或者逐节添加。或者,我可以删除所有0并替换为0,然后在字符更改时添加0,然后对0进行拆分,但是这两种方式都显得很愚蠢。如果有人对更好/更美的方法,正则表达式或逻辑有任何想法,那就太好了。 问题答案: 这似乎像您期望的那样工作 测试: 输出

  • 问题 你想创建一个字符串,让它包含体现某个 CoffeeScript 变量的文本。 解决方案 使用 CoffeeScript 中类似 Ruby 的字符串插值,而不是 JavaScript 的字符串拼接。 插值: muppet = "Beeker" favorite = "My favorite muppet is #{muppet}!" # => "My favorite muppet is B

  • 问题内容: 在传递多个字符串进行记录时,最好使用varargs或字符串连接吗? 在生产环境中将禁用日志记录。 考虑以下代码, VS. 哪一个在两种情况下都表现良好(启用/禁用)? 问题答案: 这些都不是特别好。varargs会更好地执行,因为它不进行连接,这比数组创建要昂贵得多,但是由于您使用的是varargs而不是varargs,因此 即使在生产环境中* ,也必须在所有对象上调用该方法,会比较贵

  • 问题内容: 在Java和C#之类的语言中,字符串是不可变的,并且一次建立一个字符的字符串在计算上是昂贵的。在上述语言中,有一些库类可以降低这种成本,例如C#和Java 。 php(4或5;我对两者都感兴趣)是否都共享此限制?如果是这样,是否有类似的解决方案? 问题答案: 不,在PHP中没有stringbuilder类的类型,因为字符串是可变的。 话虽如此,根据您在做什么,有不同的方式来构建字符串。