[Kotlin] split 文字列を分割してリストにする

Kotlinのsplitメソッドで、文字列を分割してリストにするサンプルです。

目次

サンプル splitとは(文字列を分割してリストにする)
カンマで区切る / 半角スペースで区切る / タブで区切る
  スラッシュで区切る / 改行で区切る
  1文字ずつリストにする / 複数の区切り文字を指定
  取得する要素数を指定 / 文字列の末尾が空文字の時

splitとは(文字列を分割してリストにする)

public fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String>

カンマで区切る

fun main() {
    val str1 = "a,b,c"

    val arr1 = str1.split(",")
    for (a in arr1) {
        println(a) //a b c
    }
}

4行目は、splitメソッドで文字列をカンマで区切ってリストにしています。

半角スペースで区切る

fun main() {
    val str1 = "a b c"

    val arr1 = str1.split(" ")
    for (a in arr1) {
        println(a) //a b c
    }
}

4行目は、splitメソッドで文字列を半角スペースで区切ってリストにしています。

タブで区切る

fun main() {
    val str1 = "a	b	c"

    val arr1 = str1.split("\t")
    for (a in arr1) {
        println(a) //a b c
    }
}

4行目は、splitメソッドで文字列をタブで区切ってリストにしています。

スラッシュで区切る

fun main() {
    val str1 = "2020/05/21"

    val arr1 = str1.split("/")
    for (a in arr1) {
        println(a) //2020 05 21
    }
}

4行目は、スラッシュで区切ってリストにしています。

改行で区切る

fun main() {
    val str1 = "赤と黄\r\n青と緑"

    val arr1 = str1.split("\r\n","\n")
    for (a in arr1) {
        println(a) //赤と黄 青と緑
    }
    println(arr1.size) // 2
}

正規表現で改行を指定しています。
\r\nは復帰改行(CRLF)、\nは改行(LF)、パイプ(|)はorを意味します。

1文字ずつリストにする

fun main() {
    val str1 = "abc"

    val arr1 = str1.split("")
    println(arr1.size) // 5

    var arr2 = str1.toCharArray()
    println(arr2.size) // 3
    for (a in arr2) {
        println(a) //a b c
    }
}

2行目は、区切り文字はありません。
4行目のsplitメソッドの引数は空文字で1文字ずつのリストになりますが余分な空文字も入ってしまいます。
7行目のようにtoCharArrayを使用すると空文字は入りません。

複数の区切り文字を指定

区切り文字としてコロン(:)とカンマ(,)を指定しています。

fun main() {
    val str1 = "1:a,2:b,3:c"

    val arr1 = str1.split(",",":")
    for (a in arr1) {
        println(a) //1 a 2 b 3 c
    }
}

4行目のカンマ(,)とコロン(:)を単純にカンマで区切っています。

取得する要素数を指定

引数のlimit=数値は、戻り値の要素数の上限になります。

fun main() {
    val str1 = "a,b,c,d,e,f,g"

    val array1 = str1.split(",",limit = 3)
    for (a in array1) {
        println(a) //「a」「b」「c,d,e,f,g」
    }
}

4行目は、2つ目の引数がlimit=3です。戻りの要素数は3つになります。

文字列の末尾が空文字の時

fun main() {
    val str1 = "a,b,c,,"

    val array1 = str1.split(",")

    println(array1.size) // 5
    for (a in array1) {
        println(a) //「a」「b」「c」「」「」
    }
    val array2 = str1.split(",").dropLastWhile { it.isEmpty() }

    println(array2.size) // 3
    for (a in array2) {
        println(a) //「a」「b」「c」
    }
}

2行目は、末尾がカンマで終わっています。
4行目はsplitメソッドのカンマで区切っています。空文字も取得し要素は5つになります。
10行目はsplitメソッドとdropLastWhileとisEmpty()で末尾の2つの空文字を削除しています。

関連の記事

[Kotlin] substring 文字列を切り出す
kotlin 文字列を結合する(StringBuilder/+/join)
[Kotlin] indexOf 文字列の位置を取得

△上に戻る