Mencari Semua Kedudukan Subrentetan Dalam Rentetan Yang Lebih Besar dalam C#
Masalah:
Memandangkan rentetan yang besar, anda perlu mengenal pasti dan menyimpan kedudukan semua kejadian subrentetan tertentu dalam rentetan itu. Sebagai contoh, jika subrentetan ialah "ekstrak"(me,i-have lot. of]tanda baca" muncul pada permulaan dan tengah rentetan yang lebih besar, kedua-dua kejadian harus ditempatkan dan kedudukan indeksnya ditambahkan pada senarai, menghasilkan senarai yang mengandungi 0 dan indeks kejadian tengah.
Penyelesaian:
Kod yang disediakan menggunakan kaedah IndexOf, yang boleh digunakan untuk mencari kejadian pertama subrentetan dalam rentetan Walau bagaimanapun, kaedah ini hanya mengembalikan padanan pertama Untuk mencari semua kejadian, gelung boleh digunakan untuk memanggil IndexOf berulang kali bermula dari kedudukan selepas padanan sebelumnya sehingga tiada lagi padanan ditemui Kedudukan indeks kemudiannya boleh ditambah ke senarai yang diingini.
Berikut ialah versi diperbetulkan bagi yang disediakan. kod:
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 }
Pendekatan Alternatif:
Penyelesaian lain melibatkan penggunaan kaedah sambungan untuk kemudahan yang lebih mudah >
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; } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Kejadian Subrentetan Dalam Rentetan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!