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 < 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