天天看點

StringBuilder:字元串建構

String 對象是不可改變的。每次使用 System.String 類中的方法之一時,都要在記憶體中建立一個新的字元串對象,這就需要為該新對象配置設定新的空間。在需要對字元串執行重複修改的情況下,與建立新的 String 對象相關的系統開銷可能會非常昂貴。如果要修改字元串而不建立新的對象,則可以使用 System.Text.StringBuilder 類。

StringBuilder可以在執行個體化的時候承載一個字元串,然後在後期動态的改變字元串中的值,而不會重新建立和銷毀對象。

System.Text.StringBuilder sb = new StringBuilder("Hello");

sb.Append(" C#");

sb.AppendLine("www.witshare.org");

sb.Append(DateTime.Now);

System.Console.WriteLine(sb.ToString());

運作的結果如圖3.1.31:

圖3.1.31

對于運作的結果,我們可以了解到StringBuilder可以動态的為字元串追加資訊,甚至是一行帶回車資訊的字元串。

StringBuilder不但可以追加,也可以對字元串做出其他不同的處理。

sb.Insert(0,"www.witshare.org");

sb.Insert(sb.Length - 1, ".", 12);

sb.Remove(0, 4);

運作的結果如圖3.1.32:

圖3.1.32

雖然 StringBuilder 的對象是動态對象,允許擴充它所封裝的字元串中字元的數量,但是您可以為它可容納的最大字元數指定一個值。此值稱為該對象的容量,不應将它與目前 StringBuilder 對象容納的字元串長度混淆在一起。

以下代碼描述了這個過程:

System.Text.StringBuilder sb = new StringBuilder("Hello", 10);

System.Console.WriteLine("StringBuilder最大長度{0}", sb.Capacity);

sb.Append("C#");

sb.Insert(0, "www.witshare.org");

System.Console.WriteLine("StringBuilder産生的字元串的實際長度{0}", sb.ToString().Trim().Length);

運作的結果如圖3.1.33:

圖3.1.33

StringBuilder各種方法中最強大的是AppendFormat方法,該方法運作以格式化的能力插入字元串,以下代碼描述了如何使用這個方法:

sb.AppendFormat("{0}/n{1}/t{2}", 1 + 1, DateTime.Now, new int[] { 4, 5, 6, 7 });

運作結果如圖3.1.34:

<a href="http://blog.51cto.com/attachment/201203/223606101.jpg" target="_blank"></a>

圖3.1.34

除非你需要大量的對字元串進行插入、追加和移除,那麼你确實的需要使用StringBuilder類,而StringBuilder類最強大的AppendFormat卻不一定需要StringBuilder進行實作。String類的Format方法本質上和StringBuilder的AppendFormat相同,筆者更建議你使用String類的Format。

System.Console.WriteLine(string.Format("你好,現在是{0}{1}點", DateTime.Now.Hour &lt; 12 ? "上午" : "下午", DateTime.Now.ToShortTimeString()));

運作的結果如圖3.1.35:

<a href="http://blog.51cto.com/attachment/201203/223615151.jpg" target="_blank"></a>

圖3.1.35

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805139