我有两个字符串
val a = "abc"
val b = "xyz"
我要合并它,并需要如下输出
axbycz
我将两个字符串都添加到arraylist中,然后对其进行平面映射
val c = listOf(a, b)
val d = c.flatMap {
it.toList()
}
但没有得到想要的结果
答案 0 :(得分:10)
使用zip
函数。它创建带有“相邻”字母的配对列表。然后,您可以将joinToString
与转换器一起使用以创建最终结果。
a.zip(b) // Returns the list [(a, x), (b, y), (c, z)]
.joinToString("") { (a, b) -> "$a$b" } // Joins the list back to a string with no separator
答案 1 :(得分:3)
您始终可以使用简单的循环,假设两个字符串的大小相同。这样,您只需分配一个StringBuilder
和计数器变量,而不分配任何lists
,arrays
或pairs
:
val a = "abc"
val b = "xyz"
val sb = StringBuilder()
for(i in 0 until a.length){
sb.append(a[i]).append(b[i])
}
val d = sb.toString()
答案 2 :(得分:0)
marstran的答案非常简洁,Pawels的答案非常快。使用buildString
,您可以兼得两全:
buildString {
a.zip(b).forEach { (a, b) ->
append(a).append(b)
}
}
buildString
创建一个StringBuilder
并将其作为接收器提供给lambda。它返回构建的字符串。
在此处尝试:Kotlin Playground。感谢Pawel创建原始基准。