VB.NETで文字列を検索する方法をマスター!IndexOfとContainsの使い方を初心者向けに徹底解説
生徒
「文章の中から、特定の言葉が入っているかどうかを調べたいときはどうすればいいですか?」
先生
「VB.NETには、文字列の中に特定の文字があるかを探すための便利な道具が用意されていますよ。」
生徒
「検索する方法はいくつかあるんですか?」
先生
「はい。主に『含まれているか確認する』方法と『どこにあるか場所を特定する』方法の2つがあります。今回はその代表格であるContainsとIndexOfを詳しく見ていきましょう!」
1. 文字列検索が必要な理由とは?
プログラミングをしていると、膨大な文字データの中から特定の情報を探し出したい場面が非常に多くあります。例えば、ユーザーが入力したメールアドレスに「@」が含まれているかを確認したり、住所録から「東京都」で始まるデータを見つけ出したりする場合です。このように、ある言葉がどこにあるのか、あるいは存在するかどうかをチェックする操作を文字列検索と呼びます。
VB.NET(ヴィービー・ドットネット)は、マイクロソフトが開発したプログラミング言語で、初心者にも読みやすい英語に近い書き方が特徴です。文字列を扱う操作は、どんなアプリケーション開発でも必ずと言っていいほど登場する基本中の基本ですので、しっかりとマスターしましょう。
2. Containsメソッドで「含まれているか」をチェックする
まずは一番簡単な方法であるContains(コンテインズ)メソッドについて解説します。英語の「Contain」は「含む」という意味があります。その名の通り、ある文字列の中に指定したキーワードが含まれているかどうかを調べるために使います。
このメソッドの最大の特徴は、結果が「はい(True)」か「いいえ(False)」の二択で返ってくることです。このように「はい」か「いいえ」で表されるデータ型をBoolean型(論理型)と呼びます。難しい計算や場所の特定は不要で、単に「あるかないか」だけを知りたいときに最適な方法です。
Dim message As String = "プログラミングの世界へようこそ!"
' "世界" という文字が含まれているか確認
Dim result As Boolean = message.Contains("世界")
If result = True Then
Console.WriteLine("「世界」という言葉が見つかりました!")
Else
Console.WriteLine("見つかりませんでした。")
End If
実行結果は以下のようになります。
「世界」という言葉が見つかりました!
3. IndexOfメソッドで「場所」を特定する
次に、より高度な検索方法であるIndexOf(インデックス・オブ)メソッドを紹介します。これは、探したい文字が文字列の何番目にあるかを数値で教えてくれるものです。
ここで注意が必要なのが、パソコンの世界では数は「0」から数え始めるというルールです。1番最初の文字は「0番目」、2番目の文字は「1番目」となります。この順番を表す数字のことをインデックス(添え字)と呼びます。もし、探している文字が見つからなかった場合、IndexOfは「-1」という数値を返します。これは「存在しない」という合図なので、非常に重要なポイントです。
Dim targetText As String = "VB.NETは楽しいプログラミング言語です。"
' "楽しい" が何文字目から始まるか調べる
Dim position As Integer = targetText.IndexOf("楽しい")
If position <> -1 Then
Console.WriteLine("見つかった位置は " & position & " 番目です。")
Else
Console.WriteLine("見つかりませんでした。")
End If
実行結果は以下の通りです。0から数えてみてください。「V」が0、「B」が1、「.」が2、「N」が3、「E」が4、「T」が5、「は」が6なので、「楽しい」の「楽」は7番目になります。
見つかった位置は 7 番目です。
4. 大文字と小文字を区別しないで検索する方法
文字列の検索で初心者がよくつまずくのが、大文字と小文字の区別です。例えば、「Visual Basic」という文字の中から「visual」を検索しようとすると、先頭が小文字なので通常は見つからないと判定されてしまいます。これを無視して検索するには、オプションを指定する必要があります。
VB.NETではStringComparison(ストリング・コンパリゾン)という機能を使って、比較のルールを細かく決めることができます。StringComparison.OrdinalIgnoreCase(オーディナル・イグノア・ケース)という指定をすると、大文字と小文字を同じものとして扱ってくれます。これは実務でもよく使われるテクニックです。
Dim sampleText As String = "Microsoft Visual Studio"
' 小文字の "visual" で検索してみる(大文字小文字を区別しない設定)
Dim isFound As Boolean = sampleText.Contains("visual", StringComparison.OrdinalIgnoreCase)
If isFound Then
Console.WriteLine("大文字小文字を区別せずに発見しました!")
End If
5. 文字列の先頭や末尾を判定する方法(StartsWith / EndsWith)
「特定の文字から始まっているか」や「特定の文字で終わっているか」だけを調べたいときもあります。そのような場合は、検索メソッドの兄弟分であるStartsWith(スターツ・ウィズ)やEndsWith(エンズ・ウィズ)を使うと非常にスマートに書けます。
例えば、ファイルの拡張子が「.txt」かどうかを調べたり、URLが「https」で始まっているかを確認したりする際に便利です。IndexOfを使って「0文字目にあるか」を調べることもできますが、StartsWithを使ったほうがコードが読みやすくなり、ミスも減ります。このように、コードを誰が見ても分かりやすく書くことを「可読性を高める」と言います。
6. 文字列検索を活用した実践的な条件分岐
これまでに学んだContainsやIndexOfは、プログラムの処理を枝分かれさせる条件分岐(If文)と組み合わせて真価を発揮します。単に検索するだけでなく、「もし見つかったらこの処理をする、見つからなかったら別の処理をする」という流れを作ることが、プログラミングの醍醐味です。
初心者のうちは、まず「Contains」を使って「あるかないか」を確認する癖をつけましょう。その後、もしその文字を使って切り取り操作などを行いたい場合に「IndexOf」で場所を調べる、という二段階のステップで考えると理解がスムーズに進みます。検索メソッドは他にも、特定の文字が最後に出現する位置を探すLastIndexOfなど、多くのバリエーションがあります。
7. エラーを防ぐためのポイント:Nullチェック
文字列検索を行う際に、一つだけ気をつけなければならない非常に重要な概念があります。それがNull(ヌル)です。プログラミングにおいてNullとは「何もない、空っぽの状態」を指します。もし、中身が全く入っていない変数(Nothing)に対して検索メソッドを使おうとすると、プログラムが途中で止まってしまう「例外(エラー)」が発生します。
安全に検索を行うためには、変数が空っぽでないことを確認してから検索を実行するか、VB.NETの便利な機能である「?.」(Null条件演算子)などを使って、エラーにならない工夫をすることが大切です。初心者のうちは、まず「変数の箱の中にちゃんと文字が入っているかな?」と意識するだけでも、バグの少ない良いプログラムが書けるようになりますよ。