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

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

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青と\n緑"

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

\r\nは復帰改行(CRLF)、\nは改行(LF)を意味します。

 

ドットで区切る

fun main() {
    val str = "test.txt"

    val arr = str.split(".")
    for (a in arr) {
        println(a) //test txt
    }
    println(arr.size) // 2
}

区切り文字としてドットをそのまま指定します。

 

空文字で区切る(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 = "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つの空文字を削除しています。

 

複数の区切り文字を指定

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

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つになります。

関連の記事

Kotlin substring 文字列を切り出す
kotlin 文字列を結合する(StringBuilder/+/join)>

△上に戻る