[Kotlin] indexOf 文字列の位置を取得

Kotlinの文字列の位置を取得するサンプルです。

目次

indexOf 前から検索する(引数1つ)
  前から検索+開始位置を指定(引数2つ)
  前から検索+大文字小文字を区別しない(引数3つ)
lastIndexOf 後から検索する(引数1つ)
  後から検索+開始位置を指定(引数2つ)
  後から検索+大文字小文字を区別しない(引数3つ)

前から検索する(引数1つ)

public fun CharSequence.indexOf(string: String): Int
  • 前から検索して引数に指定した文字列が出現した位置を返します。
  • 引数は、検索する文字列です。
  • 該当の文字がなかったときは-1を返します。
  • 最初の1文字目の位置は0です。
fun main() {
    val str1 = "abcabc"
    println(str1.indexOf("a")) // 0
    println(str1.indexOf("b")) // 1
    println(str1.indexOf("c")) // 2
    println(str1.indexOf("abc")) //0
    println(str1.indexOf("z")) // -1

    val str2 = "あいうあいう"
    println(str2.indexOf("あ")) // 0
    println(str2.indexOf("い")) // 1
    println(str2.indexOf("う")) // 2
}

3~6行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。
7行目は、該当の文字がないので-1が返ります。
9行目は、変数に日本語の文字列を代入しています。

 

前から検索+開始位置を指定(引数2つ)

public fun CharSequence.indexOf(string: String, 開始位置): Int
  • 1つ目の引数は、検索する文字列です。
  • 2つめの引数は、検索を開始する位置です。
fun main() {
    val str1 = "あいうあいう"
    println(str1.indexOf("あ", 0)) // 0
    println(str1.indexOf("あ", 1)) // 3
    println(str1.indexOf("あ", 2)) // 3
    println(str1.indexOf("あ", 3)) // 3
    println(str1.indexOf("あ", 4)) // -1
    println(str1.indexOf("あ", 5)) // -1
}

3行目の2つめの引数は0で対象の文字列は(あいうあいう)です。位置の0が返ります。
4行目の2つめの引数は1で対象の文字列は(いうあいう)です。位置の3が返ります。
5行目の2つめの引数は2で対象の文字列は(うあいう)です。位置の3が返ります。
6行目の2つめの引数は3で対象の文字列は(あいう)です。位置の3が返ります。
7行目の2つめの引数は4で対象の文字列は(いう)です。文字(あ)はないので-1です。
8行目の2つめの引数は5で対象の文字列は(う)です。文字(あ)はないので-1です。

 

前から検索+大文字小文字を区別しない(引数3つ)

3つ目の引数にtrueを指定すると大文字小文字を区別しません。

fun main() {
    val str1 = "ABCabc"
    println(str1.indexOf("a", 0)) // 3
    println(str1.indexOf("a", 0,true)) // 0
}

3行目は、小文字のaが出現する位置を返します。
4行目は、3つ目の引数がtrueなので大文字小文字の区別をしません。aまたはAの位置を返します。

 

後から検索する(引数1つ)

public fun CharSequence.lastIndexOf(string: String): Int
  • 後ろから検索して引数に指定した文字列が出現した位置を返します。
  • 1つ目の引数は、検索する文字列です。
  • 該当の文字がなかったときは-1を返します。
  • 最初の1文字目の位置は0です
fun main() {
    val str1 = "abcabc"
    println(str1.lastIndexOf("a")) // 3
    println(str1.lastIndexOf("b")) // 4
    println(str1.lastIndexOf("c")) // 5
    println(str1.lastIndexOf("abc")) //3
    println(str1.lastIndexOf("z")) // -1

    val str2 = "あいうあいう"
    println(str2.lastIndexOf("あ")) // 3
    println(str2.lastIndexOf("い")) // 4
    println(str2.lastIndexOf("う")) // 5
}

3~6行目は、後ろから検索し引数の文字列が最初に見つかった位置を返しています。
7行目は、該当の文字がないので-1が返ります。
9行目は、変数に日本語の文字列を代入しています。

 

後から検索+開始位置を指定(引数2つ)

public fun CharSequence.lastIndexOf(string: String,開始位置): Int
  • 1つ目の引数は、検索する文字列です。
  • 2つめの引数は、検索を開始する位置です。
fun main() {
    val str1 = "あいうあいう"
    println(str1.lastIndexOf("あ", 5)) // 3
    println(str1.lastIndexOf("あ", 4)) // 3
    println(str1.lastIndexOf("あ", 3)) // 3
    println(str1.lastIndexOf("あ", 2)) // 0
    println(str1.lastIndexOf("あ", 1)) // 0
    println(str1.lastIndexOf("あ", 0)) // 0
}

3行目の引数は5で対象の文字列は(あいうあいう)です。位置の3が返ります。
4行目の引数は4で対象の文字列は(あいうあい)です。位置の3が返ります。
5行目の引数は3で対象の文字列は(あいうあ)です。位置の3が返ります。
6行目の引数は2で対象の文字列は(あいう)です。位置の0が返ります。
7行目の引数は1で対象の文字列は(あい)です。位置の0が返ります。
8行目の引数は0で対象の文字列は(あ)です。位置の0が返ります。

 

後から検索+大文字小文字を区別しない(引数3つ)

fun main() {
    val str1 = "ABCabc"
    println(str1.lastIndexOf("A", 5)) // 0
    println(str1.lastIndexOf("A", 5,true)) // 3
}

3つ目の引数にtrueを指定すると大文字小文字を区別しません。

3行目は、大文字のAが出現する位置を返します。
4行目は、3つ目の引数がtrueなので大文字小文字の区別をしません。Aまたはaの位置を返します。

関連の記事

Kotlin substring 文字列を切り出す

△上に戻る