使用 StringBuilder 類別
String 物件是不變的。每次您使用 System.String 類別的其中一個方法時,便會在記憶體中建立新的字串物件,這時需要為這個新物件配置新的記憶體空間。當您需要重複修改字串時,建立新的 String 物件可能會耗用相當多的資源。當您只要修改字串,但是不要建立新的物件時,就可以使用 System.Text.StringBuilder 類別。例如,在迴圈 (Loop) 中串連多個字串時,使用 StringBuilder 類別可增加效能。
您可以用其中一個多載的建構函式 (Constructor) 方法將變數初始化,以建立 StringBuilder 類別的新執行個體,如下列範例所示。
Dim MyStringBuilder As New StringBuilder("Hello World!")
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
設定容量和長度
雖然 StringBuilder 是動態物件,並讓您得以擴大它所包含字串中的字元數,但是您也可以指定它可容納的最大字元數。這個數值即稱為物件的容量,請不要與 StringBuilder 目前所容納字串的長度混淆。例如,您可以使用長度為 5 的 Hello 字串建立 StringBuilder 類別的新執行個體,也可以指定這個物件的最大容量為 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?
顯示在主控台上。