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 を変更しても、指定した容量に達するまでは、そのサイズが再割り当てされることはありません。 指定の容量に達した場合は、新しい領域が自動的に割り当てられ、容量が 2 倍になります。 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 の末尾に情報を追加します。 |
|
文字列で渡された書式指定子を書式指定済みのテキストに置き換えます。 |
|
現在の StringBuilder の指定したインデックス位置に文字列またはオブジェクトを挿入します。 |
|
現在の StringBuilder から指定した数の文字を削除します。 |
|
指定したインデックス位置にある指定した文字を置換します。 |
Append
Append メソッドを使用すると、現在の StringBuilder によって表される文字列の末尾に、あるオブジェクトのテキスト表現または文字列表現を追加できます。 StringBuilder を "Hello World" に初期化した後で、StringBuilder の末尾にテキストを追加する例を次に示します。 必要に応じて空白が自動的に割り当てられます。
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 オブジェクトの 6 番目のインデックス位置に単語を挿入する例を次に示します。
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 オブジェクトの 0 から始まる指定したインデックス位置から指定数の文字を削除できます。 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 オブジェクトから String への変換
StringBuilder オブジェクトによって表される文字列を String パラメーターを持つメソッドに渡したり、その文字列をユーザー インターフェイスに表示したりするには、まず、StringBuilder オブジェクトを String オブジェクトに変換する必要があります。 この変換を行うには、StringBuilder.ToString メソッドを呼び出します。 複数の StringBuilder メソッドを呼び出してから StringBuilder.ToString() メソッドを呼び出して文字列を表示する例を次に示します。
参照
参照
概念
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
StringBuilder から String への変換に関する情報を追加しました。 |
カスタマー フィードバック |