C#でプログラムを組んでいると、特定の文字列を含んでいるかどうか調べたり、文字列の位置を取得したりする場面は頻繁にあります。文字列検索の方法をしっかり理解しておくと、データ処理やユーザー入力の検証などで大いに役立ちます。
本記事では、C#における代表的な文字列検索の方法について、実例コードを交えながら解説していきます。基本的なContains
やIndexOf
から、正規表現(Regex)を用いた高度な検索まで、幅広くカバーしていますので、初心者から中級者まで参考になる内容です。
Containsメソッドで部分一致をチェックする
Contains
メソッドは、ある文字列が別の文字列に含まれているかどうかを調べるシンプルな方法です。戻り値はbool
型で、見つかればtrue
、なければfalse
を返します。
string text = "C#はとても楽しい言語です。";
bool result = text.Contains("楽しい");
Console.WriteLine(result); // 出力: True
注意点: Contains
は大文字と小文字を区別します(case-sensitive)。大文字小文字を無視したい場合は、ToLower()
やStringComparison
を使います。
bool result = text.Contains("楽しい", StringComparison.OrdinalIgnoreCase);
IndexOfメソッドで文字列の位置を取得する
IndexOf
メソッドは、検索対象の文字列が最初に現れる位置(インデックス)を返します。見つからない場合は-1
を返します。
string message = "メールアドレスを入力してください。";
int index = message.IndexOf("アドレス");
Console.WriteLine(index); // 出力: 2
部分一致の開始位置を知りたい場合に非常に有効です。
大文字小文字を無視した検索:
int index = message.IndexOf("アドレス", StringComparison.OrdinalIgnoreCase);
StartsWithとEndsWithで前方・後方一致を確認する
文字列が特定の文字列で始まっているか、または終わっているかをチェックするには、StartsWith
とEndsWith
メソッドを使います。
string fileName = "report_2025.pdf";
bool starts = fileName.StartsWith("report");
bool ends = fileName.EndsWith(".pdf");
Console.WriteLine(starts); // True
Console.WriteLine(ends); // True
ファイル名やURLなどの判定に役立ちます。
正規表現(Regex)で柔軟な検索を行う
System.Text.RegularExpressions.Regex
クラスを使えば、より高度で柔軟な検索が可能になります。
例えば、電話番号やメールアドレスのパターンに一致するかどうかのチェックができます。
using System.Text.RegularExpressions;
string input = "お問い合わせは 090-1234-5678 まで。";
bool match = Regex.IsMatch(input, @"\d{3}-\d{4}-\d{4}");
Console.WriteLine(match); // 出力: True
マッチした部分を抽出する:
Match m = Regex.Match(input, @"\d{3}-\d{4}-\d{4}");
if (m.Success)
{
Console.WriteLine("見つかった電話番号: " + m.Value);
}
Splitとforeachで部分検索のような処理を行う
複数の語句を区切って、それぞれを調べたい場合は、Split
メソッドとループを組み合わせることで、柔軟な処理が可能です。
string sentence = "C#, Java, Python, JavaScript";
string[] languages = sentence.Split(',');
foreach (string lang in languages)
{
if (lang.Trim().Contains("Java"))
{
Console.WriteLine("Javaを含む文字列: " + lang.Trim());
}
}
H2: LINQを使って複数の文字列から検索する
配列やリストなどの中から、特定の文字列を含む要素を検索したい場合は、LINQが便利です。
using System.Linq;
List<string> items = new List<string> { "赤いリンゴ", "青い空", "黄色いバナナ" };
var result = items.Where(x => x.Contains("リンゴ"));
foreach (var r in result)
{
Console.WriteLine(r); // 赤いリンゴ
}
Where
句とContains
を組み合わせることで、複雑な検索も簡潔に書けます。
検索方法を使い分けるコツ
目的に応じて検索方法を使い分けることが重要です。以下のようにまとめられます。
検索目的 | 使用メソッド |
---|---|
単純な部分一致 | Contains |
文字列の位置を知りたい | IndexOf |
前方・後方一致 | StartsWith / EndsWith |
パターンマッチング | Regex |
配列・リストから探す | LINQ(Where + Contains) |
また、大文字と小文字の区別が必要かどうか、文字コードの違い(Unicodeなど)にも注意が必要です。
まとめ
C#では文字列を検索するためのメソッドが豊富に用意されています。Contains
やIndexOf
などの基本から、Regex
による正規表現まで、場面に応じて最適な方法を選ぶことで、より効率的なコードを書くことができます。
検索条件に合わせて適切なメソッドを使い分けることが、バグの少ない、可読性の高いプログラムにつながります。
ぜひ本記事を参考に、あなたのプロジェクトにも役立ててください。