動態(tài)串StringBuilder
與String類相比,System.Text.StringBuilder類可以實現(xiàn)動態(tài)字符串。此外,動態(tài)的含義是指在修改字符串時,系統(tǒng)不需要創(chuàng)建新的對象,不會重復開辟新的內存空間,而是直接在原StringBuilder對象的基礎上進行修改。下面,將從各個應用的角度,詳細討論StringBuilder類。
1. 聲明StringBuilder串
StringBuilder類位于命名空間System.Text中,使用時,可以在文件頭通過using語句引入該空間:
using System.Text;
聲明StringBuilder對象需要使用new關鍵字,并可以對其進行初始化。如以下語句聲明了一個StringBuilder對象myStringBuilder,并初始化為“Hello”:
StringBuildermyStringBuilder=new StringBuilder("Hello");
如果不使用using關鍵字在文件頭引入System.Text命名空間,也可以通過空間限定來聲明StringBuilder對象:
System.Text.StringBuildermyStringBuilder=new StringBuilder("Hello");
在聲明時,也可以不給出初始值,然后通過其方法進行賦值。
2. 設置StringBuilder容量
StringBuilder對象為動態(tài)字符串,可以對其設置好的字符數(shù)量進行擴展。另外,還可以設置一個最大長度,這個最大長度稱為該StringBuilder對象的容量(Capacity)。
為StringBuilder設置容量的意義在于,當修改StringBuilder字符串時,當其實際字符長度(即字符串已有的字符數(shù)量)未達到其容量之前,StringBuilder不會重新分配空間;當達到容量時,StringBuilder會在原空間的基礎之上,自動不進行設置,StringBuilder默認初始分配16個字符長度。有兩種方式來設置一個StringBuilder對象的容量。
1.使用構造函數(shù)
StringBuilder構造函數(shù)可以接受容量參數(shù),例如,下面聲明一個StringBuilder對象sb2,并設置其容量為100。
StringBuilder sb2=new StringBuilder("Hello",100);
2.使用Capacity讀/寫屬性
Capacity屬性指定StringBuilder對象的容量,例如下面語句首先一個StringBuilder對象sb3,然后利用Capacity屬性設置其容量為100。
StringBuilder sb3=new StringBuilder("Hello");
3. 追加操作
追加一個StringBuilder是指將新的字符串添加到當前StringBuilder字符串的結尾處,可以使用Append和AppendFormat來實現(xiàn)這個功能。
1. Append方法
Append方法實現(xiàn)簡單的追加功能,常用形式為:
public StringBuilder Append(object value);
其中,參數(shù)value既可以是字符串類型,也可以是其他的數(shù)據(jù)類型,如bool、byte、int等。下例中,把一個StringBuilder字符串“Hello”追加為“Hello World!”。
StringBuilder sb4=new StringBuilder("Hello");
2.AppendFormat方法
AppendFormat方法可以實現(xiàn)對追加部分字符串的格式化,可以定義變量的格式,并將格式化后的字符串追加在StringBuilder后面。常用的形式為:
StringBuilder AppendFormat(string format,params object[] args);
其中,args數(shù)組指定所要追加的多個變量。format參數(shù)包含格式規(guī)范的字符串,其中包括一系列用大括號括起來的格式字符,如{0:u}。這里,0代表對應args參數(shù)數(shù)組中的第0個變量,而‘u’定義其格式。下例中,把一個StringBuilder字符串“Today is”追加“Today is *當前日期*\”。
StringBuilder sb5=new StringBuilder("Today is ");
sb5.AppendFormat("{0:yyyy-MM-dd}",System.DateTime.Now);
Console.WriteLine(sb5); //形如:"Today is 2008-10-20"
4. 插入操作
StringBuilder的插入操作是指將新的字符串插入到當前的StringBuilder字符串的指定位置,如“Hello”變?yōu)椤?/span>Heeeello”??梢允褂?/span>StringBuilder類的Insert方法來實現(xiàn)這個功能,常用形式為:
public StringBuilder Insert(int index, object value);
其中,參數(shù)index指定所要插入的位置,并從0開始索引,如index=1,則會在原字符串的第2個字符之前進行插入操作;同Append一樣,參數(shù)value并不僅是只可取字符串類型。
5. 刪除操作
StringBuilder的刪除操作可以從當前StringBuilder字符串的指定位置,刪除一定數(shù)量的字符,例如把“Heeeello”變?yōu)椤?/span>Hello”??梢允褂?/span>StringBuilder類的Remove方法來實現(xiàn)這個功能,常用形式為:
public StringBuilder Remove(int startIndex, int length);
其中,參數(shù)startIndex指定所要刪除的起始位置,其含義同Insert中的index相同;length參數(shù)指定所要刪除的字符數(shù)量。下例中,把一個StringBuilder字符串“Heeeello”通過刪除操作修改為“Hello”。
StringBuilder sb7=new StringBuilder("Heeello");
sb7.Remove(2,3); //在”He”后面刪除個字符
Console.WriteLine(sb7); //"Hello!"
6. 替換操作
StringBuilder使用Replace方法來實現(xiàn)替換操作,例如把“Hello”變?yōu)椤?/span>Hero”,就需要使用替換操作,將“ll”替換為“r”。這同String類的Replace方法非常類似,其常用
形式包括:
public StringBuilder Replace(char oldChar, char newChar);
public StringBuilder Replace(string oldValue, string newValue);
其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。
下例把“Hello”通過替換為“Hero”。
StringBuilder sb8=new StringBuilder("Hello");
sb8=sb8.Replace("ll","r");
Console.WriteLine(sb8); //Hero
7. 與String比較
通過上面的介紹,可以看出StringBuilder與String在許多操作上(如Insert、Remove、Replace)上是非常相似的。
在操作性能和內存效率方面,StringBuilder要比String好得多,可以避免產生太多的臨時字符串對象,特別是對于經常重復進行修改的情況更是如此。而另一方面,String類提供了更多的方法,可以使開發(fā)能夠更快地實現(xiàn)應用。
在兩者的選擇上,如果應用對于系統(tǒng)性能、內存要求比較嚴格,以及經常處理大規(guī)模的字符串,推薦使用StringBuilder對象;否則,可以選擇使用String。

|