2017-08-13 343 views
6

將字符串拆分爲兩個字符串的慣用方法是什麼?拆分字符串每n個字符

例子:

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

我們可以假設,該字符串具有的長度是2

多,我可以在this Java answer使用正則表達式等,但我希望能找到一個更好的辦法(即使用kotlin的其他方法之一)。

回答

9

一旦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元素。您可以修改它,並將其餘部分添加到結果中。使用generateSequencechunked

+0

我認爲這是與實施問題,如果情況下,原始字符串長度甚至沒有。 –

+0

@ LiorBar-On爲什麼?它會放棄其餘的。 – hotkey

+0

你是對的。我錯過了關於這個問題的提示。 –

1

的功能版本:

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]