ホームページ >バックエンド開発 >C++ >C# 文字列内のすべての部分文字列を効率的に検索するにはどうすればよいですか?

C# 文字列内のすべての部分文字列を効率的に検索するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 12:36:10960ブラウズ

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

C# でのより大きな文字列内の部分文字列のすべての位置の検索

より大きな文字列内での部分文字列の出現箇所の検索は、一般的なプログラミング タスクです。 C# では、string.IndexOf() メソッドは、部分文字列の最初の出現を検索する便利な方法を提供しますが、すべての出現を検索する簡単な方法は提供しません。

部分文字列の出現をすべて検索するには、次のようにします。 string.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);
  }
}

この拡張メソッドでは、次の構文を使用して文字列内の部分文字列の出現をすべて検索できます。

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");

あるいは、反復子を使用して、 substring:

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;
  }
}

この反復子を使用すると、foreach ステートメントを使用して部分文字列の出現を反復処理できます:

foreach (int index in "fooStringfooBar".AllIndexesOf("foo"))
{
  // do something with the index
}

以上がC# 文字列内のすべての部分文字列を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。