【问题标题】:Idiomatic way of using StringBuilder in kotlin? [closed]在 kotlin 中使用 StringBuilder 的惯用方式? [关闭]
【发布时间】:2019-08-20 13:30:16
【问题描述】:

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

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

val sb = StringBuilder()
sb.append(data)
val string = sb.toString()

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

val string = StringBuilder().apply {
    append(data)
}.toString()

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

val string = StringBuilder().run {
    append(data)
    toString()
}

4) ??

【问题讨论】:

标签: string kotlin idioms


【解决方案1】:

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

只是

val s = buildString { append(data) } 

【讨论】:

  • 也可以使用链式形式StringBuilder().append("first").append("second").toString()
  • 在描述中:“通常有很多条件,所以单行不适合”
  • 根据您的用例,制作字符串集合然后加入字符串是一种可行的选择。优点是您无需致电append。例如:listOf("One. Data: $data", "Two", "Three",).joinToString(separator = "; ")
【解决方案2】:

您可以跳过 StringBuilder 并使用 Kotlin 的内置字符串插值:

val string = "$data"

或者如果事情更复杂:

val string = "The answer is: $data"

或者,使用原始字符串:

val string = 
    """
    {
        "name": $name,
        "value": $value
    }
    """

【讨论】:

  • 如果在 sting 生成 3 或更多条件插值字符串比 StringBuilder 更混乱
  • 这是一个公平的批评。但是,最初的问题没有,所以我只是提供替代方案。并非每种解决方案都适用于所有问题。 :)
猜你喜欢
  • 2016-03-28
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2018-02-12
相关资源
最近更新 更多