文字列をそれぞれ2文字の文字列に分割する慣習的な方法はありますか?文字をn文字ごとに分割する
例:
"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]
私たちは、文字列は、私がthis Java answerでのような正規表現を使用することができます。2.
の倍数であるが、私はより良い方法を見つけることを期待していた長さを持っていると仮定することができます(すなわち、コトリンの追加の方法の1つを使用して)。
文字列をそれぞれ2文字の文字列に分割する慣習的な方法はありますか?文字をn文字ごとに分割する
例:
"" -> [""]
"ab" -> ["ab"]
"abcd" -> ["ab", "cd"]
私たちは、文字列は、私がthis Java answerでのような正規表現を使用することができます。2.
の倍数であるが、私はより良い方法を見つけることを期待していた長さを持っていると仮定することができます(すなわち、コトリンの追加の方法の1つを使用して)。
Kotlin 1.2がリリースされたらkotlin-stdlib
に追加されたchunked
機能をKEEP-11提案で使用できます。例:
val chunked = myString.chunked(2)
Kotlin 1.2 M2 pre-releaseでこれを試すことができます。
はそれまでは、このコードで同じことを実現することができます:
println("abcdef".chunked(2)) // [ab, cd, ef]
fun String.chunked(size: Int): List<String> {
val nChunks = length/size
return (0 until nChunks).map { substring(it * size, (it + 1) * size) }
}
この実装は、以下
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
あなたは正しいです。私は質問のメモを忘れてしまった。 –