C# での大きな文字列内の部分文字列のすべての位置の検索
問題:
大きな文字列を指定した場合、指定された部分文字列が出現するすべての位置を識別して保存する必要があります。その文字列。たとえば、部分文字列が "extract"(me,i-have Lots. of]punctuation" で、大きい文字列の先頭と中間に出現する場合、両方のインスタンスを見つけて、それらのインデックス位置をリストに追加する必要があります。 0 と中間のオカレンスのインデックスを含むリスト。
解決策:
提供されたコードは IndexOf を利用します。このメソッドは、文字列内で最初に出現した部分文字列を見つけるために使用できます。ただし、このメソッドは最初に一致したもののみを返します。ループを使用して、前の一致の後の位置から IndexOf を繰り返し呼び出すことができます。一致するものが見つからなくなるまで、インデックス位置を目的のリストに追加できます。
これは、提供されているものの修正版です。コード:
List<int> inst = new List<int>(); int index = 0; while (index < source.Length) { int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index); if (src == -1) break; // No more occurrences found inst.Add(src); index = src + 40; // Advance the search index to beyond the current match }
代替アプローチ:
もう 1 つの解決策には、より利便性を高めるための拡張メソッドの使用が含まれます。イテレータ パターンを利用する拡張メソッドの例を次に示します。 >
public static IEnumerable<int> AllIndexesOf(this string str, string value) { if (String.IsNullOrEmpty(value)) throw new ArgumentException("the string to find may not be empty", "value"); for (int index = 0;; index += value.Length) { index = str.IndexOf(value, index); if (index == -1) break; yield return index; } }
以上がC# で文字列内のすべての部分文字列を検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。