ホームページ > バックエンド開発 > C++ > C# で、より大きな文字列内で出現する部分文字列をすべて検索するにはどうすればよいですか?

C# で、より大きな文字列内で出現する部分文字列をすべて検索するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-28 22:52:15
オリジナル
675 人が閲覧しました

How Can I Find All Occurrences of a Substring within a Larger String in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート