【C#】IndexOfで複数検索を実施する方法
C#でIndexOf()メソッドは以下の処理を行います。
- 前方から文字列を検索し、最初にヒットした文字列のインデックスを返します。
- ヒットしない場合は、-1を返します。
- 第2引数を指定した場合、指定したインデックス以降の文字列を検索します。
上記の特徴+while文で繰り返し処理を行うことで複数検索を実施することができます。
// 検索結果格納用のリスト
List<int> list = new List<int>();
// 検索したい文字列
string 文字列 = "abcdabcdabcdabcdaabcabc";
// 検索したい文字列の長さ
int 文字列Len = 文字列.Count();
// 検索文字
string 検索文字 = "abc";
// 検索文字数
int 検索文字数 = 検索文字.Count();
// 初期値i = 0にて先頭から検索、
// 検索文字が存在した場合は検索文字数を加算して保持
int i = 0;
while (true)
{
// 検索文字の長さが検索位置+検索文字数以上の場合、indexOfで検索
if (文字列Len >= i + 検索文字数)
{
int 位置 = 文字列.IndexOf(検索文字, i);
// -1 == 位置の場合、文字列検索でヒットしなかった場合のため、処理を終了する
if (-1 == 位置)
{
break;
// -1 以外の場合、文字列検索でヒットしたため、リストに位置を加える
// 変数 iは今回ヒットした位置以降で検索したいため
// 位置 + 検索文字数を代入する
}
else
{
i = 位置 + 検索文字数;
list.Add(位置);
}
// 検索文字の長さが検索位置+検索文字数未満の場合、処理を終了する
}
else
{
break;
}
}
// Listに格納された出力位置を全て確認
foreach (int j in list)
{
Console.WriteLine(j);
}
Console.WriteLine("listの該当文字数:"+list.Count()); ;
// 実行結果
0
4
8
12
17
20
listの該当文字数:6
上記サンプルプログラムでは、文字列 = “abcdabcdabcdabcdaabcabc” から”abc”はどの位置にあるか※0, 4, 8, 12, 17, 20、何個存在するか※6についてをIndexOf()およびwhile文にて実装できることを確認できました。






コメントを残す