# StringBuilder

C# dasturlash tilida Stringga o'xshash StringBuilder tipi mavjud. Ular bir-biriga yaqin, lekin ma'lum farqlar ularni ajratib turadi.

Keling, StringBuilder qanday yaratilishi haqida bilib olaylik. Avallo, **System.Text** kutubxonasini chaqirishimiz lozim, shundan so'ng quyidagicha kod yoradamida StringBuilder e'lon qilinadi:

```csharp
StringBuilder strB = new StringBuilder(); 
```

Endi esa asosiy qism, ya'ni String va StringBuilderning farqini ko'rib chiqamiz:

**String bu immutable tip hissoblandi, ya'ni uni xotirada e'lon qilganimizdan so'ng uni o'zgartira olmaymiz, StringBuilder esa mutable tip hisoblandi, ya'ni u xotirada o'z ko'rinishni va o'lchamini o'zgartira oladi. Shu sababdan, StringBulider Stringdan tezroqdir.**

Misol uchun, Quyidagi kodda *str* o'zgaruvchisi 1000 martta xotiradan o'chirib tashlanadi va har safar *Salom* so'zi qo'shilib qaytadan yaratiladi.

```csharp
string str = "Salom";  
for (int i = 0; i < 1000; i++)  
{  
     str += "Salom ";  
}
```

Keling end shu misolni StringBuilder orqali ko'raylik:

```csharp
    
StringBuilder strB = new StringBuilder(); 
for (int i = 0; i < 1000; i++)  
{  
     strB.Append("Salom ");  
}
```

str o'zgaruvchisida farqli ravishda strB o'zgaruvchisi xotirada 1000 marta o'chirilib tashlanmaydi, buning o'rniga *strB* o'zgaruvchising o'ziga 1000 martta *Salom* so'zi qo'shilib yoziladi.

Yuqorida ko'rganingizdek StringBuilderning ham String kabi o'z methodlari mavjut va quyida ulardan bir nechtasiga misolar keltirilgan:

* **Append** - StringBuilderning oxiridan String qo'shish uchun ishlatiladi.

```csharp
StringBuilder strB = new StringBuilder("Hello World!!");	
string str = " Yes ";
		
strB.Append(str); 
Console.WriteLine(strB); //output:   Hello World!! Yes 

```

* **AppendLine** - **Append** funksiyasi kabi ishlaydi, lekin har bir **String**ni yangi qatordan qo'shadi:

```csharp
StringBuilder strB = new StringBuilder("Hello World!!");		
string str = " Yes ";
		
strB.AppendLine(str);
//output: Hello World!!
//				Yes
```

* **Remove** -satrning ma'lum indexdan boshqa bir indexgacha bo'lgan qismini o'chiradi:

```csharp
StringBuilder strB = new StringBuilder("Hello World!!");
strB.Remove(0, 11);

Console.WriteLine(strB); 
//output: !!
```

* **Replace** - satrning ma'lum bir qismini boshqa bir satr bilan almashtiradi.

```csharp
StringBuilder strB = new StringBuilder("Hello World!!");
strB.Replace("World", "C#");

Console.WriteLine(strB); 
//output: Hello C#!!
```

* **Clear -** StringBuilder ichidagi barcha ma'lumotlarni o'chirish uchun ishlatiladi:

```csharp
StringBuilder strB = new StringBuilder("Hello World!!");
Console.WriteLine(strB); //output: Hello World!!
strB.Clear();
Console.WriteLine(strB);  //ikkinchi qatorda hech nima chiqmaydi sababi malumotlar o'chirilgan					
```

* **Insert -** Ma'lum bir berilgan indexdan boshlab String qo'shadi:

```csharp
StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5," C#"); 

Console.WriteLine(sb);  //output: Hello C# World!
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dot-net.uz/c-.net/basic/essential/stringbuilder.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
