1. 概要

ソフトウェア開発で最も一般的なタスクの1つは、文字列内の部分文字列をチェックすることです。 たとえば、いくつかのパターンを検索したり、大きなテキストファイルの文を置き換えたりすることができます。

このチュートリアルでは、文字列にKotlinの部分文字列が含まれているかどうかを確認するための効率的な方法をいくつか紹介します。

2. 実装

Kotlinには、サブストリングをチェックするための組み込み関数と、期待される機能をシミュレートするためのいくつかの貴重な操作があります。 ネイティブのKotlinサポートから始めましょう。

2.1. ネイティブcontainsメソッド

まず、コアKotlinサポートを使用して、次を呼び出す文字列オブジェクトにサブ文字列が含まれているかどうかに応じて、trueまたはfalseを返すcontainsメソッドを使用できます。

@Test
fun `given a string when search for contained substrings then should return true`() {
    val string = "Kotlin is a programming language"
    val substring = "programming"

    val contains = string.contains(substring)
    assertThat(contains).isTrue
}

または、 in演算子を使用して部分文字列を検索することで、同じ結果を得ることができます

@Test
fun `given a string when search for substrings in the string then should return true`() {
    val string = "Kotlin is a programming language"
    val substring = "programming"

    val contains = substring in string
    assertThat(contains).isTrue
}

シナリオによっては、大文字と小文字を無視して部分文字列を検索したい場合があります。 そのために、 containsメソッドはフラグignoreCaseを受け取り、その方法でサブストリングを検索することを示すことができます

@Test
fun givenString_whenSearchSubstringsIgnoringCase_thenReturnsTrue() {
    val string = "Kotlin is a programming language"
    val substring = "Programming Language"

    val contains = string.contains(substring, true)
    assertThat(contains).isTrue
}

2.2. 正規表現

サブストリングをチェックする別の方法は、ストリング内で一致するパターンを検索するための正規表現を定義することです。

@Test
fun givenString_whenSearchSubstringsUsingRegex_thenReturnsTrue() {
    val string = "Kotlin is a programming language"
    val substring = "programming language"
    val regex = substring.toRegex();

    val contains = regex.containsMatchIn(string)
    assertThat(contains).isTrue
}

2.3. 部分文字列のインデックス

Kotlinは、特定のサブストリングのインデックスの検索と取得をサポートしています。 サブ文字列がメイン文字列内で見つかった場合、メソッドlastIndexOf()は負でない数を返します。

@Test
fun givenString_whenSearchSubstringsByIndexOf_thenReturnsNonNegative() {
    val string = "Kotlin is a programming language"
    val substring = "programming"
    val index = string.lastIndexOf(substring);

    assertThat(index).isNotNegative
}

2.4. 部分文字列の検索

メソッドfindLastAnyOf()を使用すると、指定された部分文字列の出現を見つけることができます。 このメソッドは、サブストリングの最後の出現のインデックスと指定されたサブストリングで満たされた Pair オブジェクトを返します。サブストリングのいずれも一致しない場合は、nullを返します。

@Test
fun givenString_whenSearchSubstringsWithFindLast_thenReturnsNotNullPair() {
    val string = "Kotlin is a programming language"
    val substring = "programming language"
    val found = string.findLastAnyOf(listOf(substring));

    assertThat(found).isNotNull
}

3. 結論

このチュートリアルでは、他の文字列内の部分文字列をチェックするためのいくつかの効率的な手法について説明しました。 Kotlinが公開するネイティブサポートと、この目標を達成するためのいくつかの便利な方法があります。

いつものように、この記事の完全なコードは、GitHubから入手できます。