Kotlin - 文字列操作

公開日:2019-11-06 更新日:2019-11-06
[Kotlin]

1. 概要

文字列操作を行います。


2. 文字列の結合

println("abc" + "def" + 123) // abcdef123


3. 文字列長の取得

val s:String = "0123456789"
println(s.length) // 10


4. 文字列の一部分の取得

val s:String = "0123456789"
println(s.substring(3))    // 3456789
println(s.substring(3, 6)) // 345


5. 文字列中の文字列の位置の取得

val s:String = "abcdefg"
println(s.indexOf("def")) // 3

指定した文字列が先頭または末尾にあるかどうかを取得することもできます。
println("0123456789".startsWith("012")) // true
println("0123456789".endsWith  ("789")) // true
println("0123456789".endsWith  ("012")) // false


6. 大文字・小文字の変換

println("abc".toUpperCase()) // ABC
println("ABC".toLowerCase()) // abc

先頭の文字だけ大文字、または小文字にします。
println("abcdefg".capitalize())   // Abcdefg
println("Abcdefg".decapitalize()) // abcdefg


7. 文字列の削除

先頭または末尾から、指定した文字数を削除します。
println("abcdefg".drop(3))     // defg
println("abcdefg".dropLast(3)) // abcd

接頭辞、接尾辞を削除します。
指定した接頭辞、接尾辞がない場合は、何も削除されません。
println("abcdefg".removePrefix("abc")) // defg
println("abcdefg".removeSuffix("efg")) // abcd
println("aaaaaaa".removeSuffix("abc")) // aaaaaaa

インデックスで指定した範囲を削除します。
println("abcdefg".removeRange(2, 5)) // abfg


8. 0埋め(ゼロパディング)

先頭または末尾を任意の文字で指定した桁になるまで埋めます。
println("123".padStart(10, '0')) // 0000000123
println("123".padEnd(10, '0'))   // 1230000000


9. フォーマット

書式に沿った形に変換します。
println("%05d".format(123))          // 00123
println("%5d".format(123))           //   123
println("%d %s".format(123, "abc"))  // 123 abc


10. 置換

文字列を置換します。
println("abc abc abc".replace("ab", "c")) // cc cc cc
println("abc abc abc".replace("ab", "")) // c c c
println("abc abc abc".replace('a', 'c')) // cbc cbc cbc

検索文字列を置換するのではなく、検索文字列の前後の文字列を置換することもできます。
println("abc def hij".replaceBefore(" def ", "xxx")) // xxx def hij
println("abc def hij".replaceAfter (" def ", "xxx")) // abc def xxx

println("abc abc abc".replaceAfterLast ("a", "x")) // abc abc ax
println("abc abc abc".replaceBeforeLast("a", "x")) // xabc


11. 文字列の比較

文字列の大小を比較します。大文字・小文字の区別も指定可。
println("aaa".compareTo("aac", false)) // -2
println("aaa".compareTo("AAA", false)) // 32
println("aaa".compareTo("AAA", true))  //  0
println("aaa" > "AAA") // true


12. 文字列の中で変数の使用

変数名に $ を付けると、文字列中で変数を使うことができます。
また、${ } を使うと、処理を書くこともできます。
val n = 123
val s = "test"
println("$s $n \$s ${s.toUpperCase()} ${1 + 2}") // test 123 $s TEST 3


13. ヒアドキュメント

""" で囲まれた複数行を1つの文字列にします。改行は改行として認識されます。
インデントもそのままインデントとして扱われるため、インデントが不要な場合は、インデントがなくなるように詰めて書くか、.trimIndent() でインデントを削除します。
また、$ をエスケープさせたい場合は、$ を ${'$'} にする必要があります。
val n = 123
val s1 = "test"
val s2 = """
    abc
    def
        ghi
    $s1 $n ${'$'}s1 ${1 + 2}
""".trimIndent()
println(s2)


14. 分割と結合

分割
var list = "1,2,3,4,5,6,7,8,9,10".split(",")
list.forEach{
    print(it)
}
//結果: 12345678910

結合
var list = 1..10
var s = list.joinToString(",")
println(s) // 1,2,3,4,5,6,7,8,9,10