有什么习惯用法可以将一个字符串拆分为每个字符串包含两个字符?
例如:
"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]
我们可以假设这个字符串的长度是2的倍数。
我可以使用类似于这个Java答案的正则表达式,但我希望找到更好的方法(即使用kotlin的附加方法之一)。
一旦Kotlin 1.2发布,您可以使用已添加到kotlin-stdlib
中的chunked
函数,该函数是由KEEP-11提案添加的。例如:
val chunked = myString.chunked(2)
您可以使用 Kotlin 1.2 M2 预发布版 尝试此功能。
在那之前,您可以使用以下代码实现相同的功能:
fun String.chunked(size: Int): List<String> {
val nChunks = length / size
return (0 until nChunks).map { substring(it * size, (it + 1) * size) }
}
println("abcdef".chunked(2)) // [ab, cd, ef]
此实现会丢弃少于 size
元素的余数。您可以修改它,以便将余数添加到结果中。
该实现删除小于 size
的余数,您可以修改它以使余数也被添加到结果中。
chunked
函数的功能版本:fun String.split(n: Int) = Pair(this.drop(n), this.take(n))
fun String.chunked(n: Int): Sequence<String> =
generateSequence(this.split(n), {
when {
it.first.isEmpty() -> null
else -> it.first.split(n)
}
})
.map(Pair<*, String>::second)
输出:
"".chunked(2) => []
"ab".chunked(2) => [ab]
"abcd".chunked(2) => [ab, cd]
"abc".chunked(2) => [ab, c]