C#の文字列検索(IndexOf・Containsなど)の基本を解説
生徒
「先生、C#で文字列の中に特定の文字や単語があるかどうかを調べる方法ってありますか?」
先生
「はい、ありますよ。C#では、IndexOfメソッドやContainsメソッドを使って、文字列の中から特定の文字や単語を簡単に検索できます。」
生徒
「名前の違いでどう使い分けるのかが気になります!」
先生
「いいですね。それでは、IndexOfとContainsの基本的な使い方を順番に見ていきましょう。」
1. 文字列検索とは?
「文字列検索」とは、ある文章や文字列の中から特定の文字や単語を探すことをいいます。たとえば、「りんご、バナナ、みかん」という文字列の中に「バナナ」が含まれているかどうかを調べたいときに使います。
日常の例で言うと、本の中から「重要」という言葉を探すようなものです。C#ではこれを自動的に探してくれる便利な機能があります。
2. IndexOfメソッドの基本
IndexOfメソッドは、指定した文字や単語が文字列の中でどの位置(インデックス)にあるかを調べるためのメソッドです。
インデックス(index)とは、文字列の中の文字の順番を表す番号のことです。C#では最初の文字が「0番」になります。
たとえば、「Hello」という文字列の中で「e」は1番目(インデックス1)にあります。
string text = "りんご、バナナ、みかん";
int index = text.IndexOf("バナナ");
Console.WriteLine(index);
実行結果:
4
この例では、「バナナ」という文字列が「りんご、」の後にあるため、インデックスは4になります。もし見つからない場合は「-1」が返されます。
IndexOfは「位置」を調べたいときに使うのがポイントです。
3. IndexOfで見つからない場合の判定
先ほどの説明の通り、IndexOfは見つからない場合に「-1」を返します。そのため、条件文と組み合わせて「文字が含まれているかどうか」を判断することもできます。
string text = "りんご、バナナ、みかん";
if (text.IndexOf("ぶどう") != -1)
{
Console.WriteLine("ぶどうが見つかりました。");
}
else
{
Console.WriteLine("ぶどうは見つかりませんでした。");
}
実行結果:
ぶどうは見つかりませんでした。
このように、IndexOfを使うことで「ある・ない」を調べるだけでなく、「どの位置にあるのか」も知ることができます。
4. Containsメソッドの基本
Containsメソッドは、指定した文字列が含まれているかどうかを「真(true)」または「偽(false)」で返します。つまり、「含まれているか」をシンプルに確認したいときに便利です。
string text = "りんご、バナナ、みかん";
bool hasBanana = text.Contains("バナナ");
Console.WriteLine(hasBanana);
実行結果:
True
Containsは、文字列の中に「その文字があるか」だけを知りたいときに使うのがおすすめです。シンプルで読みやすいコードになります。
5. IndexOfとContainsの違いを理解しよう
どちらも文字列を検索するためのメソッドですが、役割が少し異なります。以下の表で比較してみましょう。
| メソッド名 | 返り値(かえりち) | 用途 |
|---|---|---|
IndexOf | 見つかった位置(int)または -1 | 文字列の位置を知りたいとき |
Contains | true または false | 含まれているかどうかを確認したいとき |
このように、位置を調べたい場合はIndexOf、あるかどうかだけ調べたい場合はContainsを使うと良いでしょう。
6. 大文字と小文字の違いに注意
C#の文字列検索では、大文字と小文字が区別されます。つまり、「Apple」と「apple」は別の文字列として扱われます。
string text = "Apple";
Console.WriteLine(text.Contains("apple")); // false
実行結果:
False
もし大文字・小文字を区別せずに検索したい場合は、IndexOfに特定のオプションを指定します。
string text = "Apple";
int index = text.IndexOf("apple", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(index);
実行結果:
0
このように、StringComparison.OrdinalIgnoreCaseを使うと、大文字・小文字を無視して検索できます。
7. 部分一致検索や前方一致検索の応用
文字列の中に「部分的にでも含まれているか」を調べたいときは、Containsが便利です。たとえば、ユーザーが入力したキーワードが商品名に含まれているかを調べるときなどに使います。
string product = "チョコレートケーキ";
if (product.Contains("ケーキ"))
{
Console.WriteLine("ケーキが含まれています。");
}
実行結果:
ケーキが含まれています。
また、文字列の最初や最後に特定の文字列があるかどうかを調べるには、StartsWithやEndsWithを使うこともできます。
string word = "CSharp入門";
Console.WriteLine(word.StartsWith("CSharp")); // true
Console.WriteLine(word.EndsWith("入門")); // true