Dalam C#, rentetan tidak boleh diubah. Ini bermakna rentetan tidak boleh diubah suai setelah dibuat. Sebarang pengubahsuaian pada rentetan mengembalikan rentetan baharu yang mengandungi pengubahsuaian, manakala rentetan asal kekal tidak berubah.
string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc
Kelas StringBuilder mewakili objek seperti rentetan yang boleh diubah suai, iaitu rentetan boleh ubah. Ia dilaksanakan secara berbeza daripada jenis rentetan, yang mewakili rentetan tidak berubah.
Memandangkan mengubah suai objek rentetan menghasilkan salinan, mengubah suai objek rentetan berulang kali boleh mengakibatkan kehilangan prestasi. Untuk pengulangan kecil ia boleh diabaikan, tetapi untuk gelung besar ia boleh menjadi penting. StringBuilder menyediakan alternatif yang cekap untuk mengubah suai rentetan dengan menambahkan, memadam, menggantikan atau memasukkan aksara.
StringBuilder mengekalkan penimbal dalaman untuk memegang aksara. Jika terdapat ruang kosong dalam penimbal, data baharu akan dilampirkan. Jika tidak, ia mencipta penimbal baharu, menyalin data lama ke penimbal baharu, dan kemudian menambahkan data.
var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa
Berikut ialah cara berbeza untuk membina objek StringBuilder.
// Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 10); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);
Kelas StringBuilder mempunyai sifat Length yang menunjukkan bilangan aksara yang dimiliki objek pada masa ini. Apabila lebih banyak aksara ditambahkan pada objek, panjangnya bertambah sehingga ia mencapai kapasitinya, yang mentakrifkan bilangan maksimum aksara yang boleh dikandung oleh objek pada masa ini.
Jika bilangan aksara yang ditambah menyebabkan panjang melebihi kapasiti semasa, kelas memperuntukkan memori baharu, menggabungkan kapasitinya. Aksara baharu kemudiannya ditambahkan pada objek dan sifat Panjangnya dilaraskan.
StringBuilder terus menambah memori tambahan secara dinamik sehingga nilai sifat MaxCapacity dicapai. Selepas itu, tiada lagi memori boleh diperuntukkan untuk objek tersebut. Jika anda cuba menambah lebih banyak data pada objek, pengecualian ArgumentOutOfRangeException atau OutOfMemoryException dilemparkan.
StringBuilder menyediakan kaedah berikut untuk mengubah suai rentetan dengan mudah.
Tambah - Menambah perwakilan rentetan objek yang ditentukan pada kejadian ini.
AppendFormat< /strong> - Menambah rentetan yang dikembalikan dengan memproses rentetan format kompaun (mengandungi sifar atau lebih item format) pada kejadian ini. Setiap item format digantikan dengan perwakilan rentetan parameter objek yang sepadan. .
AppendLine - Menambahkan penamat baris lalai pada penghujung objek StringBuilder semasa.
Clear - Mengalih keluar semua aksara daripada contoh StringBuilder semasa.
CopyTo - Menyalin aksara ke julat aksara sasaran atau tatasusunan aksara.
EnsureCapacity − Memastikan kapasiti contoh StringBuilder ini sekurang-kurangnya nilai yang ditentukan.
Sama − Mengembalikan benar jika tika ini dan tika yang disediakan mempunyai nilai rentetan, Kapasiti dan MaxCapacity yang sama.
GetChunks - Mengembalikan objek yang boleh digunakan untuk mengulangi ketulan aksara.
Insert - Sisipkan perwakilan rentetan objek yang ditentukan ke dalam contoh ini pada kedudukan aksara yang ditentukan.
padam - Mengalih keluar julat aksara yang ditentukan daripada tika ini.
Ganti - Menggantikan semua kejadian aksara atau rentetan yang ditentukan dalam kejadian ini dengan aksara atau rentetan lain yang ditentukan.
ToString - Menukar tika semasa kepada rentetan.
Contoh Demonstrasi Langsung
using System; using System.Text; class Program{ static void Main(string[] args){ string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa // Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 50); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20); } }
aaabbbccc aaadddccc aaaaaaaaaa
Atas ialah kandungan terperinci Apakah tujuan kelas StringBuilder dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!