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:

csharp
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:

text
Struk Belanja
----------------
Beras 5kg        : Rp72.000
Minyak 1L        : Rp18.500
Total            : Rp90.500
Jumlah karakter: 114

Mari kita telaah baris demi baris:

  1. Baris 1 (new StringBuilder()): Satu buffer kosong dialokasikan; buffer ini yang akan tumbuh seiring penambahan teks.
  2. Baris 2-5 (AppendLine): Setiap pemanggilan menambah teks plus baris baru ke akhir buffer yang sama, tanpa membuat objek string sementara per baris.
  3. Baris 6 (struk.Append): Baris terakhir tidak memakai AppendLine agar tidak ada baris kosong di akhir struk.
  4. Baris 9 (struk.Length): Properti Length menghitung seluruh karakter di buffer, termasuk karakter baris baru, yaitu 114.

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:

csharp
struk.Replace("Rp", "IDR ");
Console.WriteLine(struk.ToString());

Output yang Dihasilkan:

text
Struk Belanja
----------------
Beras 5kg        : IDR 72.000
Minyak 1L        : IDR 18.500
Total            : IDR 90.500

Satu 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:

SituasiPilihan
Menyambung dua sampai tiga teksOperator + atau interpolasi string
Penyambungan di dalam loop atau teks sangat panjangStringBuilder
Teks perlu dimodifikasi berulang sebelum jadiStringBuilder