C# StringBuilder

在C#中,字符串類型是不可變的。這意味著字符串一旦創(chuàng)建就無法更改。例如,一個(gè)新的字符串"Hello World!"將占用堆上的內(nèi)存空間?,F(xiàn)在,通過將初始字符串更改"Hello World!"為"Hello World! from Tutorials Teacher"將在內(nèi)存堆上創(chuàng)建一個(gè)新的字符串對象,而不是在相同的內(nèi)存地址處修改原始字符串。如果通過替換,追加,刪除或在原始字符串中插入新字符串多次更改原始字符串,此行為將影響性能。

字符串的內(nèi)存分配

字符串對象的內(nèi)存分配

為了解決此問題,C#StringBuilder在System.Text命名空間中引入。StringBuilder不在內(nèi)存中創(chuàng)建新對象,而是動(dòng)態(tài)擴(kuò)展內(nèi)存以容納修改后的字符串。

StringBuilder的內(nèi)存分配

StringBuilder對象的內(nèi)存分配

創(chuàng)建一個(gè)StringBuilder對象

您可以StringBuilder使用new關(guān)鍵字并傳遞初始字符串來創(chuàng)建該類的對象。以下示例演示了創(chuàng)建StringBuilder對象。

using System.Text; //引入
            
StringBuilder sb = new StringBuilder(); //稍后將追加字符串
//或
StringBuilder sb = new StringBuilder("Hello World!");

或者,還可以使用重載構(gòu)造函數(shù)指定StringBuilder對象的最大容量,如下所示。

StringBuilder sb = new StringBuilder(50); //稍后將追加字符串
//或
StringBuilder sb = new StringBuilder("Hello World!", 50);

以上,C#在內(nèi)存堆上按順序分配最多50個(gè)空間。一旦達(dá)到指定容量,此容量將自動(dòng)加倍。還可以使用capacity或length屬性設(shè)置或檢索 StringBuilder 對象的容量。

您可以循環(huán)使用for循環(huán)來獲取或設(shè)置指定索引處的字符。

StringBuilder sb = new StringBuilder("Hello World!");

for(int i = 0; i < sb.Length; i++){
 Console.Write(sb[i]); // 輸出:Hello World!
}

從 StringBuilder 檢索字符串

StringBuilder不是字符串。使用ToString()方法從StringBuilder對象檢索字符串。

StringBuilder sb = new StringBuilder("Hello World!");

var greet = sb.ToString(); //返回“ Hello World!”"Hello World!"

向 StringBuilder 添加/追加字符串

使用 Append () 方法在當(dāng)前 StringBuilder 對象的末尾追加字符串。如果 StringBuilder 還沒有包含任何字符串,它將添加它。AppendLine ()方法在字符串的末尾附加換行符。

StringBuilder sb = new StringBuilder();
sb.Append("Hello ");
sb.AppendLine("World!");
sb.AppendLine("Hello C#");
Console.WriteLine(sb);
輸出:
Hello World!
Hello C#

將格式化的字符串追加到 StringBuilder

使用 AppendFormat() 方法將輸入字符串格式化為指定的格式,然后追加它。

StringBuilder sbAmout = new StringBuilder("您的總金額為 ");
sbAmout.AppendFormat("{0:C} ", 25);
Console.WriteLine(sbAmout);//輸出:您的總金額為$25.00

將 String 插入 StringBuilder

使用 Insert() 方法在StringBuilder對象的指定索引處插入一個(gè)字符串。

StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5," C#"); 
Console.WriteLine(sb); //輸出:Hello C# World!

在StringBuilder中刪除字符串

使用Remove()方法從指定的索引中刪除字符串,直到指定的長度。

StringBuilder sb = new StringBuilder("Hello World!",50);
sb.Remove(6, 7);
Console.WriteLine(sb); //輸出:你好

在StringBuilder中替換字符串

使用該Replace()方法將所有指定的字符串出現(xiàn)替換為指定的替換字符串。

StringBuilder sb = new StringBuilder("Hello World!");
sb.Replace("World", "C#");
Console.WriteLine(sb);//輸出:Hello C#!
要記住的要點(diǎn):
  1. StringBuilder 是可變的。

  2. StringBuilder 追加多個(gè)字符串值時(shí),執(zhí)行速度比 string 快。

  3. 當(dāng)您需要追加三個(gè)或四個(gè)以上的字符串時(shí),請使用StringBuilder。

  4. 使用Append()方法向StringBuilder對象添加或追加字符串。

  5. 使用ToString()方法從StringBuilder對象中檢索字符串。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清