scala - 从 StringBuilder 转换为 String 的正确方法是什么?

标签 scala stringbuilder

从我在网上看到的情况来看,人们似乎建议使用 toString() 方法,但是文档指出:

创建此对象的字符串表示。默认表示取决于平台。在 java 平台上,它是类名“@”和对象的十六进制哈希码的串联。

所以看起来使用这种方法可能会导致一些问题?

还有 mkString 和 result()。后者似乎最有意义。但我不确定这 3 种方法之间的区别是什么,以及是否应该使用 result()。

最佳答案

toString 实现目前只是重定向到 result 方法,因此这两个方法的行为方式相同。但是,它们表达的意图略有不同:

  • toString 请求 StringBuilder 当前状态的文本表示,即 "concise but informative (and) that is easy for a person to read" .因此,理论上,该方法的(模糊)规范并不禁止缩写结果,或以任何其他方式增强简洁性和可读性。
  • result 请求实际构造的字符串。这里似乎没有不同的读数。

因此,如果要获取结果字符串,请使用 result 尽可能清楚地表达您的意图。

这样,当字符串长度超过 9000 kB 时,代码的读者不必怀疑 StringBuilder.toString 是否会为了“简洁”而缩短某些内容,或者其他什么像这样。

mkString 完全是为了别的东西,它主要用于散布分隔符,如 "hello".mkString(",") == "h,e,l,l ,o".

一些进一步的链接:

只需使用 result()

关于scala - 从 StringBuilder 转换为 String 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68513156/

相关文章:

scala - Akka 和游戏服务器架构

python - 如何从 Spark SQL 查询 [PySpark] 获取表名?

c# - StringBuilder 中的正则表达式替换

validation - 使用 Scalaz 7 在 Scala 中验证类的内聚方式

scala - 执行外部命令

java - 尝试打印 StringBuilder 类型 : "com.jeanlucthumm.poem.Word@7852e922" 时出现奇怪的输出

java - deleteCharAt() 从 Java 字符串中删除多个字符

java - 来自 2 个(或更多)字符串的压缩字符串 - "AB"+ "YZ"= "AYBZ"

c# - 在 C# 中使用 StringBuilder 解释调试器有困难

scala - 如何对 Scala 方法的值强制执行编译时约束?