StringBuilder
, C#’ta dinamik ve verimli bir şekilde metin (string) işlemleri yapmak için kullanılan bir sınıftır. System.Text
namespace’i altında bulunur ve özellikle çok sayıda string manipülasyonu gerektiren işlemlerde performans açısından avantaj sağlar.
String vs StringBuilder
C#’ta string
immutable (değiştirilemez) bir veri tipidir. Yani, bir string
değiştirildiğinde aslında bellekte yeni bir nesne oluşturulur. Bu da sık yapılan değişikliklerde performans sorunlarına neden olabilir.
string text = "Merhaba";
text += " Dünya"; // Bellekte yeni bir string nesnesi oluşur
Bu işlem her değişiklikte yeni bir nesne oluşturduğu için hafıza ve performans açısından verimsizdir.
StringBuilder Kullanımı ile Avantaj:
StringBuilder sb = new StringBuilder("Merhaba");
sb.Append(" Dünya"); // Mevcut nesne değişir, yeni nesne oluşturulmaz
Bu kullanım, özellikle çok sayıda string manipülasyonu yapılıyorsa performansı artırır.
StringBuilder Kullanımı
StringBuilder Tanımlama
using System;
using System.Text; // StringBuilder kullanabilmek için eklenmeli
class Program
{
static void Main()
{
StringBuilder sb1 = new StringBuilder(); // Boş bir StringBuilder
StringBuilder sb2 = new StringBuilder("Merhaba"); // Başlangıç değeri ile
StringBuilder sb3 = new StringBuilder(100); // Başlangıç kapasitesi 100 olan
}
}
Append: String’in sonuna ekleme yapar.
StringBuilder sb = new StringBuilder("Merhaba");
sb.Append(" Dünya");
Console.WriteLine(sb); // Çıktı: Merhaba Dünya
AppendLine – Satır sonu ekler (\n
)
sb.AppendLine(" Nasılsın?");
Console.WriteLine(sb);
/*
Çıktı:
Merhaba Dünya
Nasılsın?
*/
Insert – Belirli bir konuma metin ekler
sb.Insert(8, "Sevgili ");
Console.WriteLine(sb); // Çıktı: Merhaba Sevgili Dünya
Remove – Belirli bir aralıktaki karakterleri siler
sb.Remove(8, 8); // 8. karakterden itibaren 8 karakteri siler
Console.WriteLine(sb); // Çıktı: Merhaba Dünya
Replace – Bir metni başka bir metinle değiştirir
sb.Replace("Dünya", "C#");
Console.WriteLine(sb); // Çıktı: Merhaba C#
Clear – İçeriği tamamen temizler
sb.Clear();
Console.WriteLine(sb.Length); // Çıktı: 0