Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencari Semua Kejadian Substring dalam Rentetan C# dengan Cekap?

Bagaimanakah Saya Boleh Mencari Semua Kejadian Substring dalam Rentetan C# dengan Cekap?

Susan Sarandon
Lepaskan: 2025-01-01 12:36:10
asal
958 orang telah melayarinya

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

Mencari Semua Kedudukan Subrentetan dalam Rentetan Lebih Besar dalam C#

Mencari kejadian subrentetan dalam rentetan yang lebih besar ialah tugas pengaturcaraan biasa. Dalam C#, kaedah string.IndexOf() menyediakan cara yang mudah untuk mencari kejadian pertama subrentetan, tetapi ia tidak menyediakan cara mudah untuk mencari semua kejadian.

Untuk mencari semua kejadian subrentetan, anda boleh menggunakan gelung yang berulang melalui rentetan yang lebih besar semasa menggunakan kaedah rentetan.IndexOf() untuk mencari setiap kejadian. Walau bagaimanapun, pendekatan ini boleh menjadi tidak cekap jika rentetan yang lebih besar adalah besar dan subrentetan ditemui beberapa kali.

Pendekatan yang lebih cekap ialah menggunakan kaedah sambungan, yang membolehkan anda menambah kaedah tersuai pada kelas sedia ada. Berikut ialah contoh kaedah sambungan yang mencari semua kejadian subrentetan dalam rentetan:

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);
  }
}
Salin selepas log masuk

Dengan kaedah sambungan ini, anda boleh menemui semua kejadian subrentetan dalam rentetan menggunakan sintaks berikut:

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
Salin selepas log masuk

Sebagai alternatif, anda juga boleh menggunakan iterator untuk mencari semua kejadian subrentetan:

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;
  }
}
Salin selepas log masuk

Pelajar ini membenarkan anda melelar melalui kejadian subrentetan menggunakan pernyataan foreach:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Semua Kejadian Substring dalam Rentetan C# dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan