StringBuilder

來源:http://www.witshare.org/bbs/blogs/leoking/archive/2009/07/30/stringbuilder.aspx

 

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:

clip_image002

圖3.1.31

對於運行的結果,我們可以瞭解到StringBuilder可以動態的爲字符串追加信息,甚至是一行帶回車信息的字符串。

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

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

sb.Append(" C#");

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

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

sb.Append(DateTime.Now);

sb.Remove(0, 4);

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

運行的結果如圖3.1.32:

clip_image004

圖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");

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

sb.Append(DateTime.Now);

sb.Remove(0, 4);

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

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

運行的結果如圖3.1.33:

clip_image006

圖3.1.33

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

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

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

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

運行結果如圖3.1.34:

clip_image008

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

clip_image010

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章