DEV Community

islomAli99
islomAli99

Posted on

C# - StringBuilder

C# tilida StringBuilder sinfi katta miqdordagi matnlarni samarali tarzda boshqarish uchun ishlatiladi. Oddiy string tipidan farqli o'laroq, StringBuilder matnni o'zgartirganda yangi obyekt yaratmaydi, balki mavjud obyekt ustida o'zgarishlar qiladi. Bu, ayniqsa, ko'p marta matn bilan ishlash jarayonida samaradorlikni oshiradi.

StringBuilder sinfining asosiy xususiyatlari:

  1. Tezlik va samaradorlik: Ko'p o'zgaruvchan matnlar ustida ishlashda string dan ko'ra samaraliroq, chunki string har safar o'zgarganda yangi obyekt yaratadi.
  2. Dinamik o'lcham: StringBuilder o'zgaruvchan uzunlikdagi matnni boshqaradi, ya'ni matn uzunligi o'zgarishi bilan joy ajratadi.
  3. Matn qo'shish va o'chirish: Turli xil usullar yordamida matn qo'shish, o'chirish yoki almashtirish imkoniyatini beradi.

Asosiy metodlar:
Append(): Matn oxiriga yangi qiymat qo‘shadi.
Insert(): Belgilangan indeksga matn qo'shadi.
Remove(): Belgilangan indeksdan boshlab belgilarni olib tashlaydi.
Replace(): Belgilangan matnni boshqa matn bilan almashtiradi.

Misollar
Misol 1: Append() va ToString()

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder tekst = new StringBuilder("Salom, ");
        tekst.Append("dunyo!");
        Console.WriteLine(tekst.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom, dunyo!

Bu yerda Append() metodi orqali "dunyo!" qismi matnning oxiriga qo'shildi. So'ng ToString() metodi bilan yakuniy natija string ga aylantirildi.

Misol 2: Insert()

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom!");
        sb.Insert(5, ", Dunyo");
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom, Dunyo!

Bu misolda Insert() metodi yordamida 5-indeksga "Dunyo" matni qo'shildi.

Misol 3: Remove()

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom, Dunyo!");
        sb.Remove(6, 6);
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom!

Bu yerda Remove() metodi 6-indeksdan boshlab 6 ta belgini o'chirdi, natijada "Dunyo" qismi olib tashlandi.

Misol 4: Replace()

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom, Dunyo!");
        sb.Replace("Dunyo", "Olam");
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom, Olam!

Bu misolda Replace() metodi orqali "Dunyo" so'zi "Olam" so'zi bilan almashtirildi.

StringBuilder C# tilida matnni dinamik boshqarish uchun mo‘ljallangan sinf bo‘lib, matn bilan tez va samarali ishlash imkonini beradi. Endi yana ko'proq tafsilot va misollar bilan tushuntirib o'taman.

StringBuilder ning asosiy ishlatilishi:
C# tilida oddiy string o'zgarmas (immutable) bo'lgani uchun, u bilan har qanday o'zgarish (matn qo'shish, olib tashlash yoki almashtirish) yangi obyekt yaratadi va bu katta hajmdagi matn bilan ishlaganda samaradorlikni pasaytirishi mumkin. StringBuilder esa bu muammoni hal qiladi, chunki u o'zgartirilsa, yangi obyekt yaratmaydi, mavjud obyektni o'zgartiradi.

Asosiy metodlar:
Append(): Matn oxiriga yangi qiymat qo‘shadi.
Insert(): Belgilangan indeksga matn qo'shadi.
Remove(): Belgilangan indeksdan boshlab belgilarni olib tashlaydi.
Replace(): Belgilangan matnni boshqa matn bilan almashtiradi.
Clear(): Butun matnni o‘chiradi.
Length va Capacity: StringBuilder ning uzunligi va sig‘imini boshqarish.

Kengaytirilgan misollar
Misol 1: Ko‘p marta Append() ishlatish

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("Bugun havo ");
        sb.Append("juda yaxshi. ");
        sb.Append("Biz ko'chat ekamiz.");
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Bugun havo juda yaxshi. Biz ko'chat ekamiz.

Bu yerda Append() metodi ko'p marta chaqirilib, matnni birlashtirishda samarali foydalanildi.

Misol 2: Insert() bilan matn qo'shish

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom Olam!");
        sb.Insert(6, "yangi ");
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom yangi Olam!

Bu yerda 6-indeksga "yangi" so'zi qo'shildi. Insert() usuli indeks bo'yicha matnni kiritadi.

Misol 3: Remove() bilan belgilarni o'chirish

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom Olam!");
        sb.Remove(6, 5);
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Salom!

Bu yerda 6-indeksdan boshlab 5 ta belgi o'chirildi. Natijada "Olam!" so'zlari olib tashlandi.

Misol 4: Replace() bilan almashtirish

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Yoz yaxshi fasl.");
        sb.Replace("Yoz", "Bahor");
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Bahor yaxshi fasl.

Bu yerda Replace() metodi "Yoz" so'zini "Bahor" so'zi bilan almashtirdi.

Misol 5: Clear() bilan tozalash

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Bu matnni o'chiramiz.");
        sb.Clear();
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
(matn bo'sh bo'ladi)

Bu yerda Clear() butun matnni o'chiradi va StringBuilder ni bo'sh holatga keltiradi.

Misol 6: Capacity va Length

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder("Salom!");
        Console.WriteLine("Uzunligi: " + sb.Length);   // Matn uzunligi
        Console.WriteLine("Sig'imi: " + sb.Capacity);  // Sig'imi (ajratilgan xotira)

        sb.Append(" Bu yangi matndir.");
        Console.WriteLine("Yangi uzunlik: " + sb.Length);
        Console.WriteLine("Yangi sig'im: " + sb.Capacity);
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:

Uzunligi: 6  
Sig'imi: 16  
Yangi uzunlik: 23  
Yangi sig'im: 32  

Enter fullscreen mode Exit fullscreen mode

Bu yerda Length matnning uzunligini bildiradi,Capacity esa StringBuilder ga ajratilgan xotirani ko'rsatadi. Matn uzayganda Capacity avtomatik ravishda kengaytiriladi.

Misol 7: AppendFormat() bilan formatlash

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("Bugungi sana: {0:D}", DateTime.Now);
        Console.WriteLine(sb.ToString());
    }
}

Enter fullscreen mode Exit fullscreen mode

Natija:
Bugungi sana: 29 sentabr 2024 yil (Yil va sana kompyuter vaqtiga qarab o'zgaradi)

Bu yerda AppendFormat() yordamida matn formatlash mumkin. {0:D} format string bo'lib, DateTime obyekti uchun format qo'llanilgan.

Xulosa
StringBuilder:

  • Tez ishlaydi va ko‘p marta o‘zgaruvchan matnlar bilan ishlashda samarali.
  • Qo‘shimcha funksiyalar (Append(), Insert(), Remove(), Replace()) bilan matnni dinamik boshqarish imkonini beradi.
  • Katta matn ustida ishlashda tavsiya etiladi, chunki u har safar yangi obyekt yaratmaydi, balki mavjud obyektni o‘zgartiradi.

Top comments (0)