Mencetak struk belanja berisi belasan baris berarti menyambung banyak potongan teks. Karena string bersifat immutable, setiap penyambungan lewat operator + menyusun objek string baru, menyalin seluruh isi lama, lalu meninggalkan objek lama untuk diambil kembali oleh garbage collector. Pada loop besar, pola ini membebani performa. Kelas StringBuilder di namespace System.Text menyelesaikannya dengan satu buffer yang isinya bisa diubah langsung.
Operasi Dasar StringBuilder #
Method Append menambah teks di akhir buffer, AppendLine menambah teks plus karakter baris baru, dan ToString mengambil hasil akhir sebagai string:
StringBuilder struk = new StringBuilder();
struk.AppendLine("Struk Belanja");
struk.AppendLine("----------------");
struk.AppendLine("Beras 5kg : Rp72.000");
struk.AppendLine("Minyak 1L : Rp18.500");
struk.Append("Total : Rp90.500");
Console.WriteLine(struk.ToString());
Console.WriteLine($"Jumlah karakter: {struk.Length}");Output yang Dihasilkan:
Struk Belanja
----------------
Beras 5kg : Rp72.000
Minyak 1L : Rp18.500
Total : Rp90.500
Jumlah karakter: 114Mari kita telaah baris demi baris:
- Baris 1 (
new StringBuilder()): Satu buffer kosong dialokasikan; buffer ini yang akan tumbuh seiring penambahan teks. - Baris 2-5 (
AppendLine): Setiap pemanggilan menambah teks plus baris baru ke akhir buffer yang sama, tanpa membuat objek string sementara per baris. - Baris 6 (
struk.Append): Baris terakhir tidak memakaiAppendLineagar tidak ada baris kosong di akhir struk. - Baris 9 (
struk.Length): PropertiLengthmenghitung seluruh karakter di buffer, termasuk karakter baris baru, yaitu114.
Mengubah Isi Buffer #
Berbeda dengan string, perubahan pada StringBuilder terjadi pada buffer yang sama. Method Replace mengganti teks di seluruh buffer, dan hasil akhir baru dikonversi menjadi string saat pencetakan:
struk.Replace("Rp", "IDR ");
Console.WriteLine(struk.ToString());Output yang Dihasilkan:
Struk Belanja
----------------
Beras 5kg : IDR 72.000
Minyak 1L : IDR 18.500
Total : IDR 90.500Satu pemanggilan Replace mengganti tiga kemunculan Rp sekaligus di dalam buffer. Tidak ada penugasan ulang seperti pada string, karena objek struk sendiri yang berubah. StringBuilder juga menyediakan Insert dan Remove untuk menyisipkan atau membuang bagian buffer pada posisi tertentu.
Kapan Memakai StringBuilder #
Pilihan alat bergantung pada jumlah operasi penyambungan:
| Situasi | Pilihan |
|---|---|
| Menyambung dua sampai tiga teks | Operator + atau interpolasi string |
| Penyambungan di dalam loop atau teks sangat panjang | StringBuilder |
| Teks perlu dimodifikasi berulang sebelum jadi | StringBuilder |