將字符串拆分爲兩個字符串的慣用方法是什麼?拆分字符串每n個字符
例子:
"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]
我們可以假設,該字符串具有的長度是2
多,我可以在this Java answer使用正則表達式等,但我希望能找到一個更好的辦法(即使用kotlin的其他方法之一)。
將字符串拆分爲兩個字符串的慣用方法是什麼?拆分字符串每n個字符
例子:
"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]
我們可以假設,該字符串具有的長度是2
多,我可以在this Java answer使用正則表達式等,但我希望能找到一個更好的辦法(即使用kotlin的其他方法之一)。
一旦Kotlin 1.2發佈,您可以使用chunked
函數,該函數由KEEP-11提案添加到kotlin-stdlib
。例如:
val chunked = myString.chunked(2)
您可以使用Kotlin 1.2 M2 pre-release來嘗試此操作。
在那之前,你可以實現相同的這段代碼:
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
元素。您可以修改它,並將其餘部分添加到結果中。使用generateSequence的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]
我認爲這是與實施問題,如果情況下,原始字符串長度甚至沒有。 –
@ LiorBar-On爲什麼?它會放棄其餘的。 – hotkey
你是對的。我錯過了關於這個問題的提示。 –