10. C# Programlama Dilinde String İşlemleri ve StringBuilder Kullanımı

C# Logo
C# Logo
image text

C# Programlama Dilinde String İşlemleri ve StringBuilder Kullanımı

C# programlama dilinde, metinlerle çalışmak oldukça yaygın bir ihtiyaçtır. Bu ihtiyacı karşılamak için C#, zengin string işleme yetenekleri sunar. Bu makalede, C# dilinde stringlerle nasıl çalışılacağını ve performans açısından kritik olan StringBuilder sınıfının nasıl kullanılacağını detaylı bir şekilde inceleyeceğiz.

String Veri Tipi

C# dilinde string veri tipi, metinsel verileri temsil etmek için kullanılır. string aslında bir System.String sınıfının bir takma adıdır. Stringler, Unicode karakter dizileridir ve değiştirilemez (immutable) yapıdadırlar. Bu, bir string oluşturulduktan sonra içeriğinin değiştirilemeyeceği anlamına gelir. String üzerinde yapılan her değişiklik, aslında yeni bir string nesnesi oluşturur.

String Tanımlama ve Başlatma:

String tanımlamak ve başlatmak oldukça basittir:

C#
string message = "Merhaba, Dünya!";
string name = "Ahmet";
string emptyString = string.Empty; // Boş bir string

Temel String İşlemleri

C#, stringlerle çalışmak için birçok yerleşik metot sunar. İşte en sık kullanılanlardan bazıları:

String Birleştirme (Concatenation)

Stringleri birleştirmenin birkaç yolu vardır:

  • + operatörü ile birleştirme
  • string.Concat() metodu ile birleştirme
  • string.Format() metodu ile biçimlendirme

Örnekler:

C#
string firstName = "Ayşe";
string lastName = "Yılmaz";

// + operatörü ile birleştirme
string fullName = firstName + " " + lastName; // Ayşe Yılmaz

// string.Concat() ile birleştirme
string fullName2 = string.Concat(firstName, " ", lastName); // Ayşe Yılmaz

// string.Format() ile biçimlendirme
string fullName3 = string.Format("{0} {1}", firstName, lastName); // Ayşe Yılmaz

Console.WriteLine(fullName);
Console.WriteLine(fullName2);
Console.WriteLine(fullName3);

String Uzunluğunu Bulma

Bir stringin uzunluğunu (karakter sayısını) bulmak için Length özelliğini kullanırız.

C#
string text = "C# Programlama";
int length = text.Length; // 14
Console.WriteLine("Metnin uzunluğu: " + length);

String İçinde Arama Yapma

Bir stringin içinde belirli bir alt stringin olup olmadığını kontrol etmek veya konumunu bulmak için aşağıdaki metotlar kullanılabilir:

  • Contains(): Belirli bir alt stringin içerilip içerilmediğini kontrol eder.
  • IndexOf(): Belirli bir alt stringin ilk görüldüğü indeksi döndürür. Bulunamazsa -1 döndürür.
  • LastIndexOf(): Belirli bir alt stringin son görüldüğü indeksi döndürür. Bulunamazsa -1 döndürür.
  • StartsWith(): Stringin belirli bir alt string ile başlayıp başlamadığını kontrol eder.
  • EndsWith(): Stringin belirli bir alt string ile bitip bitmediğini kontrol eder.

Örnekler:

C#
string sentence = "C# programlama dili çok güçlüdür.";

bool containsCSharp = sentence.Contains("C#"); // true
int indexOfDili = sentence.IndexOf("dili"); // 15
int lastIndexOfA = sentence.LastIndexOf("a"); // 28
bool startsWithCSharp = sentence.StartsWith("C#"); // true
bool endsWithNokta = sentence.EndsWith("."); // true

Console.WriteLine("C# içeriyor mu: " + containsCSharp);
Console.WriteLine("\"dili\" kelimesinin indeksi: " + indexOfDili);
Console.WriteLine("\"a\" harfinin son indeksi: " + lastIndexOfA);
Console.WriteLine("C# ile başlıyor mu: " + startsWithCSharp);
Console.WriteLine(". ile bitiyor mu: " + endsWithNokta);

String Değiştirme

Bir string içindeki belirli bir alt stringi başka bir alt string ile değiştirmek için Replace() metodu kullanılır.

C#
string text = "Merhaba Dünya";
string newText = text.Replace("Dünya", "Mars"); // Merhaba Mars
Console.WriteLine(newText);

String Bölme

Bir stringi belirli bir ayraç (delimiter) kullanarak parçalara ayırmak için Split() metodu kullanılır. Bu metot, bir string dizisi döndürür.

C#
string names = "Ali,Veli,Ayşe";
string[] nameArray = names.Split(','); // ["Ali", "Veli", "Ayşe"]

foreach (string name in nameArray)
{
    Console.WriteLine(name);
}

String Kırpma

Bir stringin başındaki ve sonundaki boşlukları veya belirtilen karakterleri temizlemek için Trim(), TrimStart() ve TrimEnd() metotları kullanılır.

C#
string text = "   Merhaba Dünya   ";
string trimmedText = text.Trim(); // "Merhaba Dünya"
string trimmedStart = text.TrimStart(); // "Merhaba Dünya   "
string trimmedEnd = text.TrimEnd(); // "   Merhaba Dünya"

Console.WriteLine("Kırpılmış metin: " + trimmedText);
Console.WriteLine("Baştan kırpılmış metin: " + trimmedStart);
Console.WriteLine("Sondan kırpılmış metin: " + trimmedEnd);

String Alt String Alma

Bir stringin belirli bir bölümünü almak için Substring() metodu kullanılır. Bu metot, başlangıç indeksi ve isteğe bağlı olarak uzunluk parametrelerini alır.

C#
string text = "C# Programlama Dili";
string subString = text.Substring(3); // " Programlama Dili"
string subString2 = text.Substring(3, 10); // " Programlam"

Console.WriteLine("Alt metin: " + subString);
Console.WriteLine("Alt metin 2: " + subString2);

StringBuilder Sınıfı

string veri tipinin değiştirilemez (immutable) yapıda olması, sık sık string manipülasyonu gerektiren durumlarda performans sorunlarına yol açabilir. Çünkü her değişiklik yeni bir string nesnesi oluşturur ve bu da bellek tüketimini artırır. Bu tür durumlar için C#, System.Text.StringBuilder sınıfını sunar. StringBuilder, değiştirilebilir (mutable) bir string sınıfıdır. Yani, içeriği değiştirildiğinde yeni bir nesne oluşturmak yerine mevcut nesne üzerinde değişiklik yapar. Bu, performans açısından önemli bir avantaj sağlar.

StringBuilder Kullanımı

StringBuilder sınıfını kullanmak için öncelikle bir örnek oluşturmanız gerekir:

C#
using System.Text;

StringBuilder sb = new StringBuilder();

StringBuilder Metotları

StringBuilder sınıfı, string manipülasyonu için çeşitli metotlar sunar:

  • Append(): Stringin sonuna yeni bir string ekler.
  • Insert(): Belirli bir konuma bir string ekler.
  • Remove(): Belirli bir aralıktaki karakterleri siler.
  • Replace(): Belirli bir alt stringi başka bir alt string ile değiştirir.
  • ToString(): StringBuilder nesnesini string veri tipine dönüştürür.

Örnekler:

C#
using System;
using System.Text;

public class Example
{
    public static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder("Merhaba");

        sb.Append(", Dünya!"); // Merhaba, Dünya!
        sb.Insert(7, " Sevgili"); // Merhaba Sevgili, Dünya!
        sb.Remove(7, 9); // Merhaba, Dünya!
        sb.Replace("Dünya", "Mars"); // Merhaba, Mars!

        string result = sb.ToString();
        Console.WriteLine(result); // Merhaba, Mars!
    }
}

StringBuilder ve String Karşılaştırması

Aşağıdaki örnek, string ve StringBuilder arasındaki performans farkını göstermektedir. Bir döngü içinde sürekli string birleştirme işlemi yapıldığında, StringBuilder‘ın performansı string‘e göre çok daha iyidir.

C#
using System;
using System.Diagnostics;
using System.Text;

public class PerformanceExample
{
    public static void Main(string[] args)
    {
        int iterations = 10000;

        // String ile performans testi
        Stopwatch stringStopwatch = Stopwatch.StartNew();
        string text = "";
        for (int i = 0; i < iterations; i++)
        {
            text += i.ToString();
        }
        stringStopwatch.Stop();
        Console.WriteLine("String süresi: " + stringStopwatch.ElapsedMilliseconds + " ms");

        // StringBuilder ile performans testi
        Stopwatch stringBuilderStopwatch = Stopwatch.StartNew();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < iterations; i++)
        {
            sb.Append(i.ToString());
        }
        stringBuilderStopwatch.Stop();
        Console.WriteLine("StringBuilder süresi: " + stringBuilderStopwatch.ElapsedMilliseconds + " ms");
    }
}

Bu örnekte, 10000 yineleme yapıldığında StringBuilder‘ın çok daha hızlı olduğu görülecektir.

Sonuç

C# dilinde stringlerle çalışmak, programlama sürecinin önemli bir parçasıdır. string veri tipi temel metin işleme ihtiyaçlarını karşılarken, performansın kritik olduğu durumlarda StringBuilder sınıfı önemli bir avantaj sağlar. Bu makalede, string işleme metotlarını ve StringBuilder sınıfının kullanımını detaylı bir şekilde inceledik. Doğru araçları doğru yerde kullanarak, daha verimli ve performanslı C# uygulamaları geliştirebilirsiniz.

Unutmayın, string değiştirilemez (immutable) bir veri tipidir, bu yüzden sık sık string manipülasyonu yapmanız gerekiyorsa StringBuilder kullanmak daha iyi bir seçenektir.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*