今回は、C#のIndexOfで特定の文字列を検索する方法をご紹介します。
IndexOfとは
IndexOfは、C#の文字列(string型)に用意されているメソッドで、指定した文字列や文字が最初に出現する位置(インデックス)を返す便利な機能です。
見つからない場合は-1が返されるため、結果をチェックすることで文字列内に目的の文字列や文字が含まれているかどうかを判定できます。
IndexOfの基本的な使い方
部分文字列を検索する
まずは、最も基本的な使い方として、文字列の中から特定の部分文字列を検索する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
string text = "Hello World!"; // "World"を検索 int index = text.IndexOf("World"); if (index != -1) { // 見つかった場合の処理 Console.WriteLine($"「World」はインデックス {index} から見つかりました。"); } else { // 見つからなかった場合の処理 Console.WriteLine("「World」は見つかりませんでした。"); } |
「World」はインデックス 6 から見つかりました。
このように、見つかった場合は最初の出現位置が返され、見つからなかった場合は-1が返されます。
オーバーロードと検索範囲指定
IndexOfにはオーバーロードが複数存在し、検索開始位置や検索範囲などを指定することができます。
たとえば、文字列の先頭以外から検索を始めたい場合や、検索範囲を限定したい場合に便利です。
1 2 3 4 5 6 7 8 9 |
string text = "C# is a powerful language. C# is widely used."; // 最初の "C#" を検索 int firstIndex = text.IndexOf("C#"); // 最初に見つかった "C#" の直後から次の "C#" を検索 int secondIndex = text.IndexOf("C#", firstIndex + 1); Console.WriteLine($"最初の \"C#\" は {firstIndex} にあり、次は {secondIndex} にあります。"); |
最初の “C#” は 0 にあり、次は 26 にあります。
開始位置と文字数を指定して検索を行うことも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
string text = "This is an example string."; // 位置5から10文字分の範囲内で "an" を検索 int index = text.IndexOf("an", 5, 10); if (index != -1) { Console.WriteLine($"指定範囲内で \"an\" がインデックス {index} に見つかりました。"); } else { Console.WriteLine("指定範囲内で \"an\" は見つかりませんでした。"); } |
指定範囲内で “an” がインデックス 8 に見つかりました。
大文字小文字を区別しない検索
デフォルトでは、大文字小文字は区別して検索されますが、StringComparison.OrdinalIgnoreCaseのような比較オプションを指定すると、大文字小文字を無視した検索が可能です。
1 2 3 4 5 6 7 8 9 10 11 |
string text = "Hello World!"; int index = text.IndexOf("hello", StringComparison.OrdinalIgnoreCase); if (index != -1) { Console.WriteLine($"大文字小文字を無視して \"hello\" がインデックス {index} に見つかりました。"); } else { Console.WriteLine("大文字小文字を無視しても \"hello\" は見つかりませんでした。"); } |
大文字小文字を無視して “hello” がインデックス 0 に見つかりました。
複数箇所の検索方法
同じ文字列が複数回出現している場合、IndexOfを繰り返し呼び出して、すべての出現位置を確認することができます。
1 2 3 4 5 6 7 8 9 10 |
string text = "C# is fun. Learning C# can be fun and rewarding."; string searchTerm = "fun"; int index = text.IndexOf(searchTerm); while (index != -1) { Console.WriteLine($"\"{searchTerm}\" がインデックス {index} に見つかりました。"); // 今回見つかった位置の次から検索を再開 index = text.IndexOf(searchTerm, index + searchTerm.Length); } |
“fun” がインデックス 6 に見つかりました。
“fun” がインデックス 26 に見つかりました。
IndexOfを使用する際の注意点
- -1の判定を必ず行うこと(見つからない場合は-1が返る)
- 検索開始位置や検索範囲を指定する場合は、範囲外にならないように注意
- 大文字小文字の区別を行うかどうかを事前に検討する
- 大量のデータを扱う場合は、パフォーマンス面の考慮が必要
まとめ
C#のIndexOfメソッドは、文字列から特定の部分を検索する際に多用される基本的な機能です。
検索開始位置や検索範囲を指定するオーバーロードもあるため、柔軟な検索が実現できます。
見つからない場合の判定や範囲指定に注意しながら、用途に合わせて活用すると便利です。