每n个字符拆分字符串

时间:2017-08-13 11:37:16

标签: string split kotlin

将字符串拆分为每个包含2个字符的字符串的惯用方法是什么?

示例:

"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]

我们可以假设字符串的长度是2的倍数。

我可以使用this Java answer中的正则表达式,但我希望找到更好的方法(即使用kotlin的其他方法之一)。

2 个答案:

答案 0 :(得分:18)

发布Kotlin 1.2后,您可以使用KEEP-11提案添加到chunked的{​​{1}}功能。例如:

kotlin-stdlib

您已经可以使用Kotlin 1.2 M2 pre-release尝试此操作。

在此之前,您可以使用以下代码实现相同的功能:

val chunked = myString.chunked(2)

<子>

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] 个元素的余数。您可以修改它,也可以将余数添加到结果中。

答案 1 :(得分:2)

chunked的功能版使用generateSequence

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]