在 kotlin 中使用 StringBuilder 的惯用方式?

cur*_*hov 4 string idioms kotlin

我经常编写非常复杂的 toString() 方法,这个问题总是困扰着我——哪个变体更容易阅读。下面的例子是简化的,通常有很多条件,所以单行不适合。

1) 就像在普通的 Java 中一样:

val sb = StringBuilder()
sb.append(data)
val string = sb.toString()
Run Code Online (Sandbox Code Playgroud)

2) apply + toString() - 不是很漂亮吗?

val string = StringBuilder().apply {
    append(data)
}.toString()
Run Code Online (Sandbox Code Playgroud)

3) run + toString() 最后一条语句也不是很好

val string = StringBuilder().run {
    append(data)
    toString()
}
Run Code Online (Sandbox Code Playgroud)

4) ??

cur*_*hov 8

@dyukha 答案是 100% 最佳选择:https ://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/build-string.html

只是

val s = buildString { append(data) } 
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用链式形式 `StringBuilder().append("first").append("second").toString()` (4认同)
  • 根据您的用例,创建字符串集合然后连接到字符串是一个可行的替代方案。优点是不需要调用`append`。例如: `listOf("One.Data: $data", "Two", "Three",).joinToString(separator = "; ")` (2认同)