C# で大きな文字列内のすべての部分文字列の位置を検索する
大きな文字列を扱う場合、特定の部分文字列のすべてのインスタンスを見つけることが重要になる場合があります。解析とデータ分析用。この記事では、そのようなインスタンスをすべて見つけてそのインデックスをリストに保存するという課題に取り組みます。
問題ステートメント
分析する必要がある大きな文字列があります。この文字列内で、特定の部分文字列が出現するたびにその位置を識別して保存する必要があります。文字列の例が "extract"(me,i-have Lots. of]punctuation" であると仮定します。大きい文字列内でこの部分文字列が出現するすべての箇所を検索し、そのインデックスをリストに追加したいとします。
解決策
方法 1:
C# の IndexOf メソッドを使用できますただし、最初に出現した部分文字列を見つけるには、ループを使用して文字列を反復処理し、インスタンスが見つからなくなるまで検索を続ける必要があります。
この手法は、以下を使用することで改善できます。コードをより簡潔にするための拡張メソッド。拡張メソッドの例を次に示します。
public static List<int> AllIndexesOf(this string str, string value) { if (String.IsNullOrEmpty(value)) throw new ArgumentException("the string to find may not be empty", "value"); List<int> indexes = new List<int>(); for (int index = 0;; index += value.Length) { index = str.IndexOf(value, index); if (index == -1) return indexes; indexes.Add(index); } }
メソッド。 2:
代わりに、反復子を使用してインデックスを順番に生成することもできます:
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; } }
これらのメソッドは両方とも任意の文字列オブジェクトに簡単に追加できるため、すべての部分文字列を検索するのが便利になります。たとえば、次の行は、文字列内で出現する部分文字列「foo」をすべて検索します。 "fooStringfooBar":
List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
以上がC# で、より大きな文字列内で出現する部分文字列をすべて検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。