String類有不可改變性。每次執行字符操作時,都會創建一個新的String對象。
StringBuilder 類解決了對字符串進行重複修改的過程中創建大量對象的問題。初始化一個StringBuilder 之後,它會自動申請一個默認的StringBuilder 容量(默認值是16),這個容量是由Capacity來控制的.並且允許,我們根據需要來控制Capacity的大小,也可以通過Length來獲取或設置StringBuilder 的長度.
舉例: 用String類這麼寫
String begin_query = "select UPPER(MachineName) As MachineName, "+"LOWER(MachineOwner) As MachineOwner, Status, "+ "StartTime from NET_STRESS WHERE ";
String end_query = " AND StartTime > '" + startTime + "'AND StartTime < '" + endTime + "'";
String query = begin_query + GetWhereClause("PASSED") + end_query;
用StringBuilder類這麼寫:
StringBuilder begin_query = new StringBuilder();
begin_query.Append("select UPPER(MachineName) As MachineName ");
begin_query.Append("LOWER(MachineOwner) As MachineOwner, Status, ");
begin_query.Append("StartTime from NET_STRESS WHERE ");
StringBuilder end_query = new StringBuilder();
end_query.Append(" AND StartTime > '");
end_query.Append(startTime);
end_query.Append("' AND StartTime < '");
end_query.Append(endTime);
end_query.Append("'");
String query = begin_query.Append(GetWhereClause("PASSED")).Append(end_query).ToString();
StringBuilder 類的一些屬性與方法
--------------------------------------------------------------------------------
Length 屬性並不是只讀的。
StringBuilder sb=new StringBuilder("I live the language");
Console.WriteLine(sb.ToString( ));
sb.Length = 6;
//Displays "I live"
Console.WriteLine(sb.ToString( ));
Capacity 屬性
描述:當前爲實例分配的字符數量。默認容量是16,如果將一個字符串作爲參數提供給構造函數,容量以最接近 2 的冪的值。
MaxCapacity 屬性
描述:這個實例中可以被分配的字符最大數量。
Append( ) 方法
描述:追加給定值的字符串表示。
StringBuilder sb=new StringBuilder( );
Console.WriteLine( sb.Capacity+"/t"+sb.Length );
sb.Append ( 'a' , 17 )
Console.WriteLine( sb.Capacity+"/t"+sb.Length );
16 0 <== 輸出
32 17
EnsureCapacity( Int capacity ) 方法
描述:如果當前容量小於指定容量,內存分配會增加內存空間以達到指定容量。
Replace( Char oldchar,Char newchar ) 方法
描述:用newchar替換oldchar。
Replace( String oldstring,String newstring ) 方法
描述:用newstring替換oldstring。
Replace( Char oldchar,Char newchar,Int startpos,Int count ) 方法
描述:從startpos到count-1之間用newchar替換oldchar。
Replace( String oldstring,String newstring,Int startpos,Int count ) 方法
描述:從startpos到count-1之間用newstring替換oldstring。
ToString( ) 方法
StringBuilder sb=new StringBuilder( "I live this game" );
String s1=sb.ToString( ); //Displays "I live this game"
String s2=sb.ToString(3,4); //Displays "live"
在這裏第二個ToString( )方法調用了String類的Substring( )方法
public String ToString( int startIndex,int length )
{
return m_StringValue.Substring( startIndex,length );
}
本文來自CSDN博客 出處:http://blog.csdn.net/yjfhg/archive/2006/09/07/1190843.aspx
http://msdn.microsoft.com/zh-cn/library/2839d5h5(VS.80).aspx
String 對象是不可改變的。每次使用 System.String 類中的方法之一時,都要在內存中創建一個新的字符串對象,這就需要爲該新對象分配新的空間。在需要對字符串執行重複修改的情況下,與創建新的 String 對象相關的系統開銷可能會非常昂貴。如果要修改字符串而不創建新的對象,則可以使用 System.Text.StringBuilder 類。例如,當在一個循環中將許多字符串連接在一起時,使用 StringBuilder 類可以提升性能。
通過用一個重載的構造函數方法初始化變量,可以創建 StringBuilder 類的新實例,正如下面的示例中所闡釋的那樣。
Dim MyStringBuilder As New StringBuilder("Hello World!")
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
設置容量和長度
雖然 StringBuilder 對象是動態對象,允許擴充它所封裝的字符串中字符的數量,但是您可以爲它可容納的最大字符數指定一個值。此值稱爲該對象的容量,不應將它與當前 StringBuilder 對象容納的字符串長度混淆在一起。例如,可以創建 StringBuilder 類的帶有字符串“Hello”(長度爲 5)的一個新實例,同時可以指定該對象的最大容量爲 25。當修改 StringBuilder 時,在達到容量之前,它不會爲其自己重新分配空間。當達到容量時,將自動分配新的空間且容量翻倍。可以使用重載的構造函數之一來指定 StringBuilder 類的容量。下面的示例指定可以將 MyStringBuilder 對象擴充到最大 25 個空白。
Dim MyStringBuilder As New StringBuilder("Hello World!", 25)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);
另外,可以使用讀/寫 Capacity 屬性來設置對象的最大長度。下面的示例使用 Capacity 屬性來定義對象的最大長度。
MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;
EnsureCapacity 方法可用來檢查當前 StringBuilder 的容量。如果容量大於傳遞的值,則不進行任何更改;但是,如果容量小於傳遞的值,則會更改當前的容量以使其與傳遞的值匹配。
也可以查看或設置 Length 屬性。如果將 Length 屬性設置爲大於 Capacity 屬性的值,則自動將 Capacity 屬性更改爲與 Length 屬性相同的值。如果將 Length 屬性設置爲小於當前 StringBuilder 對象內的字符串長度的值,則會縮短該字符串。
修改 StringBuilder 字符串
下表列出了可以用來修改 StringBuilder 的內容的方法。
方法名 | 使用 |
---|---|
將信息追加到當前 StringBuilder 的結尾。 |
|
用帶格式文本替換字符串中傳遞的格式說明符。 |
|
將字符串或對象插入到當前 StringBuilder 對象的指定索引處。 |
|
從當前 StringBuilder 對象中移除指定數量的字符。 |
|
替換指定索引處的指定字符。 |
Append
Append 方法可用來將文本或對象的字符串表示形式添加到由當前 StringBuilder 對象表示的字符串的結尾處。下面的示例將一個 StringBuilder 對象初始化爲“Hello World”,然後將一些文本追加到該對象的結尾處。將根據需要自動分配空間。
Dim MyStringBuilder As New StringBuilder("Hello World!") MyStringBuilder.Append(" What a beautiful day.") Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a beautiful day."); Console.WriteLine(MyStringBuilder);
此示例將 Hello World! What a beautiful day. 顯示到控制檯。
AppendFormat
AppendFormat 方法將文本添加到 StringBuilder 的末尾,而且實現了 IFormattable 接口,因此可接受格式化部分中描述的標準格式字符串。可以使用此方法來自定義變量的格式並將這些值追加到 StringBuilder 的後面。下面的示例使用 AppendFormat 方法,將一個設置爲貨幣值格式的整數值放到 StringBuilder 的末尾。
Dim MyInt As Integer = 25 Dim MyStringBuilder As New StringBuilder("Your total is ") MyStringBuilder.AppendFormat("{0:C} ", MyInt) Console.WriteLine(MyStringBuilder)
int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is "); MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);
此示例將 Your total is $25.00 顯示到控制檯。
Insert
Insert 方法將字符串或對象添加到當前 StringBuilder 中的指定位置。下面的示例使用此方法將一個單詞插入到 StringBuilder 的第六個位置。
Dim MyStringBuilder As New StringBuilder("Hello World!") MyStringBuilder.Insert(6, "Beautiful ") Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful "); Console.WriteLine(MyStringBuilder);
此示例將 Hello Beautiful World! 顯示到控制檯。
Remove
可以使用 Remove 方法從當前 StringBuilder 中移除指定數量的字符,移除過程從指定的從零開始的索引處開始。下面的示例使用 Remove 方法縮短 StringBuilder。
Dim MyStringBuilder As New StringBuilder("Hello World!") MyStringBuilder.Remove(5, 7) Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7); Console.WriteLine(MyStringBuilder);
此示例將 Hello 顯示到控制檯。
Replace
使用 Replace 方法,可以用另一個指定的字符來替換 StringBuilder 對象內的字符。下面的示例使用 Replace 方法來搜索 StringBuilder 對象,查找所有的感嘆號字符 (!),並用問號字符 (?) 來替換它們。
Dim MyStringBuilder As New StringBuilder("Hello World!") MyStringBuilder.Replace("!"c, "?"c) Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace('!', '?'); Console.WriteLine(MyStringBuilder);
此示例將 Hello World? 顯示到控制檯。