使用 StringBuilder 類別

String 物件是不可變動的。 每次您使用 System.String 類別的其中一個方法時,就會在記憶體中建立新的字串物件,而這需要為這個新物件配置新的記憶體空間。 當您需要重複修改字串時,建立新的 String 物件可能會耗用相當多的資源。 當您只要修改字串,但是不要建立新的物件時,就可以使用 System.Text.StringBuilder 類別。 例如,在迴圈中串連多個字串時,使用 StringBuilder 類別可增加效能。

具現化 StringBuilder 物件

您可以用其中一個多載的建構函式方法將變數初始化,以建立 StringBuilder 類別的新執行個體,如下列範例所示。

Dim MyStringBuilder As New StringBuilder("Hello World!")
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
StringBuilder^ MyStringBuilder = gcnew 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);  
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!", 25);

此外,您可以使用讀取/寫入 Capacity 屬性來設定物件的最大長度。 下列範例會使用 Capacity 屬性來定義最大的物件長度。

MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;
MyStringBuilder->Capacity = 25;

EnsureCapacity 方法可用來檢查目前 StringBuilder 的容量。 如果容量大於傳遞的值,不會進行任何變更;但是,如果容量小於傳遞的值,則會將目前的容量變成符合傳遞的值。

Length 屬性也可以用來進行檢視或設定。 如果將 Length 屬性的值設定為大於 Capacity 屬性,則 Capacity 屬性的值會自動變成與 Length 屬性相同。 若將 Length 屬性的值設定為小於目前 StringBuilder 物件內字串的長度,則會縮短該字串。

修改 StringBuilder 字串

下表會列出您可以用來修改 StringBuilder 內容的方法。

方法名稱

用途

StringBuilder.Append

將資訊附加到目前 StringBuilder 的結尾

StringBuilder.AppendFormat

以格式化的文字取代字串中傳遞的格式規範

StringBuilder.Insert

將字串或物件插入目前 StringBuilder 中所指定的索引處

StringBuilder.Remove

從目前的 StringBuilder 中移除指定的字元數

StringBuilder.Replace

取代位於指定索引位置的指定字元

Append

Append 方法可用來將文字或物件的字串表示加到目前 StringBuilder 所代表的字串結尾。 下列範例會將 StringBuilder 初始化為 "Hello World",然後再將一些文字附加到該物件的結尾。 空間會依照需要自動配置。

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Append(" What a beautiful day.");
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.

AppendFormat

StringBuilder.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)
' The example displays the following output:
'     Your total is $25.00  
int MyInt = 25; 
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Your total is $25.00      
int MyInt = 25;
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Your total is ");
MyStringBuilder->AppendFormat("{0:C} ", MyInt);
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Your total is $25.00

Insert

Insert 方法會將字串或物件加入至目前 StringBuilder 物件中的指定位置。 下列範例會使用這個方法,將單字插入至 StringBuilder 物件的第六個位置。

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!

Remove

您可以使用 Remove 方法,在目前的 StringBuilder 物件中,從指定的以零為起始的索引開始,移除指定數目的字元。 下列範例會使用 Remove 方法來縮短 StringBuilder 物件。

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Remove(5, 7)
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Remove(5,7);
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello

Replace

Replace 方法可用來以別的指定字元取代 StringBuilder 物件中的字元。 下列範例會使用 Replace 方法搜尋 StringBuilder 物件中驚歎號字元 (!) 的所有執行個體,然後用問號字元 (?) 來取代。

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(MyStringBuilder)
' The example displays the following output:
'       Hello World?
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World?
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Replace('!', '?');
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World?

將 StringBuilder 物件轉換為字串

您必須先將 StringBuilder 物件轉換為 String 物件,才能將 StringBuilder 物件所代表的字串傳遞至擁有 String 參數的方法,或是在使用者介面中顯示。 您可以藉由呼叫 StringBuilder.ToString 方法進行這項轉換。 下列範例會呼叫一些 StringBuilder 方法,然後呼叫 StringBuilder.ToString() 方法顯示字串。

請參閱

參考

System.Text.StringBuilder

概念

格式化型別

其他資源

基本字串作業

變更記錄

日期

記錄

原因

已加入將 StringBuilder 轉換為 String 的相關資訊。

客戶回函。