プログラミングでデータを操作する時、そのデータに特定の文字列が含まれているかどうか判定することがよくあります。
例えば、ユーザーが画面上にあるテキストボックスに入力した内容に特定のキーワードが含まれているかどうか、あるいはファイルの内容に特定の情報が含まれているかどうかを判定したい時が挙げられます。
C# では、このような文字列の判定を行うための方法がいくつかあります。この記事では C# で特定の文字列が含まれているかどうかを判定する5つの方法を紹介します。
ぜひ、この記事を参考してプログラミングしてみてください。
オススメの参考書
C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。
特定の文字列を含むかどうかを判定する方法
C# で特定の文字列が含まれているかどうかを判定する5つの方法を紹介します。
文字列はstring型として扱われ、様々なメソッドを使用することで、その文字列内に特定の文字列が含まれているかどうかを判定することができます。
- Containsメソッド
- IndexOfメソッド
- StartsWithメソッド
- EndsWithメソッド
- Regex.IsMatchメソッド
Contains メソッド
Contains
メソッドは、文字列の中に特定の文字列が含まれているかどうかを判定し、bool
型の値を返します。含まれている場合はtrue
、含まれていない場合はfalse
を返します。
判定結果 = 文字列.Contains(特定の文字列)
このメソッドはよく使用するメソッドで、判定したい文字列に対してContains
メソッドを呼び出して、引数として特定の文字列を渡すと、その特定の文字列が含まれているかどうかを判定します。
次のサンプルコードはContains
メソッドを使用した例です。
var text1 = "1234567890";
var serachWord1 = "3";
// 特定の文字列が含まれているかどうかを判定
if (text1.Contains(serachWord1))
{
Console.WriteLine($"{serachWord1}は含まれています");
}
else
{
Console.WriteLine($"{serachWord1}は含まれていません");
}
var text2 = "abcdef";
var serachWord2 = "cde";
// 特定の文字列が含まれているかどうかを判定
if (text2.Contains(serachWord2))
{
Console.WriteLine($"{serachWord2}は含まれています");
}
else
{
Console.WriteLine($"{serachWord2}は含まれていません");
}
実行結果は次のようになります。
3は含まれています
cdeは含まれています
通常、Contains
メソッドは大文字と小文字を区別して判定します。例えば、”abcdef”の中から”A”を検索すると、判定結果はfalse
になります。これは”A”と”a”は異なる文字として扱われているからです。
Contains
メソッドは大文字と小文字を区別せずに判定することも可能です。Contains
メソッドの引数にStringComparison.OrdinalIgnoreCase
を指定すると区別されないようになります。
var text3 = "abcdef";
var serachWord3 = "A";
// 特定の文字列が含まれているかどうかを判定
if (text3.Contains(serachWord3))
{
Console.WriteLine($"{serachWord3}は含まれています");
}
else
{
Console.WriteLine($"{serachWord3}は含まれていません");
}
var text4 = "abcdef";
var serachWord4 = "A";
// 特定の文字列が含まれているかどうかを判定
if (text4.Contains(serachWord4, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine($"{serachWord4}は含まれています");
}
else
{
Console.WriteLine($"{serachWord4}は含まれていません");
}
実行結果は次のようになります。
Aは含まれていません
Aは含まれています
IndexOf メソッド
IndexOf
メソッドは文字列の中に特定の文字列が含まれている場合、その位置のインデックスを返します。特定の文字列が含まれていない場合、-1を返します。つまり、IndexOf
メソッドを実行して返ってきた値が0以上なら、特定の文字列が含まれていることになります。
インデックス = 文字列.IndexOf(特定の文字列)
次のサンプルコードはIndexOf
メソッドを使用した例です。
var text1 = "1234567890";
var serachWord1 = "3";
// 特定の文字列が含まれているかどうかを判定
var index1 = text1.IndexOf(serachWord1);
if(index1 != -1)
{
Console.WriteLine($"{serachWord1}は文字列内のインデックス{index1}にあります");
}
else
{
Console.WriteLine($"{serachWord1}は見つかりませんでした");
}
var text2 = "abcdef";
var serachWord2 = "cde";
// 特定の文字列が含まれているかどうかを判定
var index2 = text2.IndexOf(serachWord2);
if (index2 != -1)
{
Console.WriteLine($"{serachWord2}は文字列内のインデックス{index2}にあります");
}
else
{
Console.WriteLine($"{serachWord2}は見つかりませんでした");
}
実行結果は次のようになります。
3は文字列内のインデックス2にあります
cdeは文字列内のインデックス2にあります
IndexOf
メソッドもContains
メソッド同様に大文字と小文字を区別して判定します。
大文字と小文字を区別せずに判定したいなら、IndexOf
メソッドもStringComparison.OrdinalIgnoreCase
を指定すれば区別されないようになります。
var text3 = "abcdef";
var serachWord3 = "A";
// 特定の文字列が含まれているかどうかを判定
var index3 = text3.IndexOf(serachWord3);
if (index3 != -1)
{
Console.WriteLine($"{serachWord3}は文字列内のインデックス{index3}にあります");
}
else
{
Console.WriteLine($"{serachWord3}は見つかりませんでした");
}
var text4 = "abcdef";
var serachWord4 = "A";
// 特定の文字列が含まれているかどうかを判定
var index4 = text4.IndexOf(serachWord4, StringComparison.OrdinalIgnoreCase);
if (index4 != -1)
{
Console.WriteLine($"{serachWord4}は文字列内のインデックス{index4}にあります");
}
else
{
Console.WriteLine($"{serachWord4}は見つかりませんでした");
}
実行結果は次のようになります。
Aは見つかりませんでした
Aは文字列内のインデックス0にあります
StartsWith メソッド
StartsWith
メソッドは特定の文字列が先頭に含まれているかどうかを判定し、その結果をbool
値で返します。特定の文字列から始まっている場合はtrue
、特定の文字列から始まっていない場合はfalse
を返します。
判定結果 = 文字列.StartsWith(特定の文字列)
次のサンプルコードはStartsWith
メソッドを使用した例です。
var text1 = "abcdef";
var serachWord1 = "a";
// 特定の文字列から始まっているかどうかを判定
if (text1.StartsWith(serachWord1))
{
Console.WriteLine($"{serachWord1}から始まっています");
}
else
{
Console.WriteLine($"{serachWord1}から始まっていません");
}
var text2 = "abcdef";
var serachWord2 = "b";
// 特定の文字列から始まっているかどうかを判定
if (text2.StartsWith(serachWord2))
{
Console.WriteLine($"{serachWord2}から始まっています");
}
else
{
Console.WriteLine($"{serachWord2}から始まっていません");
}
実行結果は次のようになります。
aから始まっています
bから始まっていません
StartsWith
メソッドも通常は大文字と小文字を区別して判定します。
大文字と小文字を区別せずに判定したいなら、StringComparison.OrdinalIgnoreCase
を指定すれば区別されないようになります。
var text3 = "abcdef";
var serachWord3 = "A";
// 特定の文字列から始まっているかどうかを判定
if (text3.StartsWith(serachWord3))
{
Console.WriteLine($"{serachWord3}から始まっています");
}
else
{
Console.WriteLine($"{serachWord3}から始まっていません");
}
var text4 = "abcdef";
var serachWord4 = "A";
// 特定の文字列から始まっているかどうかを判定
if (text4.StartsWith(serachWord4, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine($"{serachWord4}から始まっています");
}
else
{
Console.WriteLine($"{serachWord4}から始まっていません");
}
実行結果は次のようになります。
Aから始まっていません
Aから始まっています
EndsWith メソッド
EndsWith
メソッドは特定の文字列が末尾に含まれているかどうかを判定し、その結果をbool
値で返します。特定の文字列で終わっている場合はtrue
、特定の文字列で終わっていない場合はfalse
を返します。
判定結果 = 文字列.EndsWith(特定の文字列)
次のサンプルコードはEndsWith
メソッドを使用した例です。
var text1 = "abcdef";
var serachWord1 = "f";
// 特定の文字列で終わっているかどうかを判定
if (text1.EndsWith(serachWord1))
{
Console.WriteLine($"{serachWord1}で終わっています");
}
else
{
Console.WriteLine($"{serachWord1}で終わっていません");
}
var text2 = "abcdef";
var serachWord2 = "e";
// 特定の文字列で終わっているかどうかを判定
if (text2.EndsWith(serachWord2))
{
Console.WriteLine($"{serachWord2}で終わっています");
}
else
{
Console.WriteLine($"{serachWord2}で終わっていません");
}
実行結果は次のようになります。
fで終わっています
eで終わっていません
EndsWith
メソッドも通常は大文字と小文字を区別して判定します。
大文字と小文字を区別せずに判定したいなら、StringComparison.OrdinalIgnoreCase
を指定すれば区別されないようになります。
var text3 = "abcdef";
var serachWord3 = "F";
// 特定の文字列で終わっているかどうかを判定
if (text3.EndsWith(serachWord3))
{
Console.WriteLine($"{serachWord3}で終わっています");
}
else
{
Console.WriteLine($"{serachWord3}で終わっていません");
}
var text4 = "abcdef";
var serachWord4 = "F";
// 特定の文字列で終わっているかどうかを判定
if (text4.EndsWith(serachWord4, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine($"{serachWord4}で終わっています");
}
else
{
Console.WriteLine($"{serachWord4}で終わっていません");
}
実行結果は次のようになります。
Fで終わっていません
Fで終わっています
Regex クラス(正規表現)
正規表現は特定の文字列のパターンを検索・置換・抽出できるツールです。正規表現を使うと、単純な文字列の検索だけでなく、さらに複雑な条件で判定を行えます。
C# のSystem.Text.RegularExpressions
名前空間には、正規表現を使うための多くのクラスとメソッドが定義されています。ここではRegex
クラスのIsMatch
メソッドを使い、特定の正規表現パターンに一致する文字列があるかどうかをチェックする方法を紹介します。
判定結果 = Regex.IsMatch(文字列, 特定の文字列)
次のサンプルコードはIsMatch
メソッドを使用した例です。
using System.Text.RegularExpressions;
var text1 = "abcdef";
var serachWord1 = "abc";
// 特定の文字列が含まれているかどうかを判定
if (Regex.IsMatch(text1, serachWord1))
{
Console.WriteLine($"{serachWord1}は含まれています");
}
else
{
Console.WriteLine($"{serachWord1}は含まれていません");
}
var text2 = "abcdef";
var serachWord2 = "abc|def";
// 特定の文字列が含まれているかどうかを判定
if (Regex.IsMatch(text2, serachWord2))
{
Console.WriteLine($"{serachWord2.Replace("|", "もしくは")}のいずれかが含まれています");
}
else
{
Console.WriteLine($"{serachWord2.Replace("|", "もしくは")}のいずれかも含まれていません");
}
実行結果は次のようになります。
abcは含まれています
abcもしくはdefのいずれかが含まれています
まとめ
この記事では、特定の文字列が含まれているかどうかを判定する方法について紹介しました。
C# では以下の5つのメソッドを使用することで、特定の文字列が含まれているかどうかを簡単に判定することができます。
- Containsメソッド
- IndexOfメソッド
- StartsWithメソッド
- EndsWithメソッド
- Regex.IsMatchメソッド
これらのメソッドの扱い方をぜひ理解しておきましょう。
以上、最後まで読んで頂きありがとうございました。