从字符串列表的列表构建字符串

Luc*_*uca 5 kotlin

我宁愿采用这种丑陋的方式从列表中构建字符串:

val input = listOf("[A,B]", "[C,D]")

val builder = StringBuilder()
builder.append("Serialized('IDs((")
for (pt in input) {
 builder.append(pt[0] + " " + pt[1])
 builder.append(", ")  
}
builder.append("))')")
Run Code Online (Sandbox Code Playgroud)

问题是它在最后一个元素后面添加了一个逗号,如果我想避免这种情况,我需要添加另一个 if 检查最后一个元素的循环。

我想知道在 kotlin 中是否有更简洁的方法来做到这一点?

编辑

最终结果应该是这样的:

Serialized('IDs((A B,C D))')
Run Code Online (Sandbox Code Playgroud)

Jof*_*rey 5

在 Kotlin 中,您可以将joinToString用于此类用例(它只处理在元素之间插入分隔符)。

它非常通用,因为它允许为每个元素指定一个转换函数(除了更经典的separator, prefix, postfix)。这使得它相当于将所有元素映射到字符串,然后将它们连接在一起,但是在一次调用中。

如果input确实像List<List<String>>您在标题中提到的那样并且您在循环中假设,您可以使用:

input.joinToString(
    prefix = "Serialized('IDs((",
    postfix = "))')",
    separator = ", ",
) { (x, y) -> "$x $y" }
Run Code Online (Sandbox Code Playgroud)

请注意,语法 with(x, y)是一种解构语法,它会自动获取列表中列表的第一个和第二个元素(括号很重要)。

如果您的输入实际上是您在代码顶部编写的List<String>内容,那么您可以使用:listOf("[A,B]", "[C,D]")

input.joinToString(
    prefix = "Serialized('IDs((",
    postfix = "))')",
    separator = ", ",
) { it.removeSurrounding("[", "]").replace(",", " ") }
Run Code Online (Sandbox Code Playgroud)