【Swift】

文字列検索で任意の文字列を含むか・任意の文字列で開始または終了しているのか(前方一致・後方一致)を判定する方法

contains()、hasPrefix()、hasSuffix()の使い方と仕様

投稿日 2021/11/28 更新日 2021/11/28


こんにちは。当サイトの管理者「元木皇天」です。

今回は、Swiftで文字列検索を行い任意の文字列を含むかどうか・任意の文字列で始まっているかどうか、任意の文字列で終わっているかどうかを判定する方法について解説いたします。

この辺の文字列操作関連はよく使用すると思うので、ぜひ覚えていただけたら嬉しいです。

環境
OS:MacOS Big Sur
Xcode:バージョン12.3
Swift:バージョン5.3

文字列検索(任意の文字列を含む)

まずは、文字列検索を行い、文字列内に任意の文字列を含むかどうかを確認する方法について解説いたします。

任意の文字列を含むかどうかを判定するには、Swiftではcontains()を使用します。

使い方は以下の通りです。(containsの戻り値はBool型です。また、大文字と小文字は区別されます。)

import Foundation

let str: String = "ABCDEFGHI"
//文字列内にBCを含むかどうかを判定する
var flg: Bool = str.contains("BC")

ここで一つ注意が必要なのが、import Foundationを必ず行うということです。

理由としては、そもそもSwiftのStringクラスでは、引数にString型を受け取ることができる「contains」メソッドが存在しないからです。

(引数に「Character」型を受け取ることができるcontainsは存在する。その場合1文字しか判定条件に使用できない。)

ですので、うっかりインポートを忘れると引数ミスでエラーになってしまいますので気をつけてください。

import Foundationを記述することで、StringクラスではなくNSStringクラスが持つcontainsメソッドを使用することができるようになり、 引数エラーにならずに処理を実行することができます。


以下、実際に実行した結果です。

余談ですが、unicode表記でも使用することができます。知っておくと何かの役に立つかもしれないので載せておきます。

containsを使用して文字列内に任意の文字列を含むかを検索する

さらに余談ですが、containsの元の英単語「contain」の意味は「XXを含む」という意味だそうです。

まあ知っている人もいるとは思いますが、知らない方向けに英単語の意味も一緒に覚えれば記憶によく結びつくかなと思って書いてみました。

weblio様-containの意味のリンク

文字列検索(任意の文字列で始まっている・前方一致)

次にご紹介するのは、文字列が任意の文字列で始まっているか(前方一致)を確認する方法です。

任意の文字列で始まっているかを確認するにはhasPrefix()を使用します。

使い方は以下の通りです。(戻り値はBool型です。また、大文字と小文字は区別されます。)

let str: String = "ABCDEFGHI"
//文字列がABCで始まるかどうかを判定する
var flg: Bool = str.hasPrefix("ABC")

こちらも余談ですが、先ほどのcontainsと同様にunicode表記でも判定できるので、使い所が来たらこのことを思い出して使用してください。

以下実際に実行した結果です。

hasPrefixを使用して文字列が任意の文字列で開始しているかどうかを判定する

ついでなので、こちらも英単語の意味をご紹介したいと思います。

hasPrefixの「prefix」の意味ですが、「接頭辞」という意味だそうです。ちなみに僕は知りませんでした。(笑)

weblio様-prefixの意味のリンク

文字列検索(任意の文字列で終わっている・後方一致)

最後にご紹介するのは、文字列が任意の文字列で終わっているか(後方一致)を確認する方法です。

任意の文字列で終わっているかを確認するにはhasSuffix()を使用します。

先程のprefixと名前が似てて紛らわしいですね。。そう思っているのは僕だけでしょうか。。

使い方は以下の通りです。(戻り値はBool型です。また、大文字と小文字は区別されます。)

let str: String = "ABCDEFGHI"
//文字列がGHIで終わるかどうかを判定する
var flg: Bool = str.hasSuffix("GHI")

こちらも先ほどのcontains、prefixと同様にunicode表記でも判定できるので、使い所が来たらこのことを思い出して使用してください。

以下実際に実行した結果です。

hasSuffixを使用して文字列が任意の文字列で終了しているかどうかを判定する

ここまできたらついでなので、こちらも英単語の意味をご紹介したいと思います。

hasSuffixの「suffix」の意味ですが、「接尾辞」という意味だそうです。まあ先程prefixで検索した結果から大方予想はできますね(笑)

weblio様-suffixの意味のリンク

まとめ

Swiftでの文字列検索は以下を使用する

任意の文字列を含むか確認
contains()
任意の文字列で始まるか確認
prefix()
任意の文字列で終わるか確認
suffix()

参考文献・おすすめ文献