StringBuilder クラス

  • 不変の文字列 … String クラス
  • 可変の文字列 … StringBuilder クラス

Stringが小さい場合など、StringBuilderに置き換えてもパフォーマンスの向上を望めないことがあります。Remarks - StringBuilder Class (System.Text) | MSDN

StringBuilder sb = new StringBuilder();

sb.Append("AAA");
sb.Append(10);
string str1 = sb.ToString(); // "AAA10"

sb.Clear();

sb.Append(true);
sb.Append(new DateTime(2001, 2,3));
string str2 = sb.ToString(); // "True2001/02/03 0:00:00"

コンストラクタ

public StringBuilder ();
StringBuilder() - StringBuilder Constructor (System.Text) | Microsoft Learn

生成時に容量を指定しなかった場合は実装固有の既定値が設定され、それは16文字です。StringBuilder() - stringbuilder.cs

public StringBuilder (int capacity, int maxCapacity);
StringBuilder(Int32, Int32) - StringBuilder Constructor (System.Text) | Microsoft Learn

生成時に指定したmaxCapacityを超える文字を追加すると、例外が投げられます。

StringBuilder sb = new StringBuilder(0, 5);
sb.Append("123");
sb.Append("456"); // ArgumentOutOfRangeException「容量が現在のサイズより小さい値です。」

stringからも生成できます。

public StringBuilder (string value);

プロパティ

プロパティ 内容
int Length 現在の文字数
int Capacity 割り当てられたメモリに格納できる最大文字数
int MaxCapacity 最大文字数
char Chars[Int32] 指定位置の文字

Length

現在の文字数より小さな長さを指定すると、その長さまで切り詰められます。逆に大きな長さを指定すると、その長さまでUnicode NULL文字 (U+0000) で埋められます。

StringBuilder sb = new StringBuilder();
sb.Append("123456789");

sb.Length = 3; // "123" (3文字に、切り詰められている)
sb.Length = 5; // "123\0\0" (5文字まで、NULL文字で埋められている)

MaxCapacity

.NET 4.0以降ではMaxCapacityを指定していても、小さな文字列を追加したときはその容量を超えることがあります。Remarks - StringBuilder.MaxCapacity Property (System.Text) | Microsoft Learn

StringBuilder sb = new StringBuilder(3, 5);
sb.Append("12");
int c1 = sb.Capacity; // 3

sb.Append("34");
int c2 = sb.Capacity; // 6

// sb.Append("56"); // OK
sb.Append("56789"); // System.ArgumentOutOfRangeException

メソッド

主要なメソッド
区分 メソッド 機能
追加 Append(Object) 指定オブジェクトの文字列形式を、末尾に追加
AppendFormat(String, Object) 指定オブジェクトを、書式指定して末尾に追加
AppendLine(String) 指定文字列と既定の行終端記号 (line terminator) を、末尾に追加 (既定の行終端記号はEnvironment.NewLine)
挿入 Insert(Int32, Object) 指定オブジェクトの文字列形式を、指定位置に追加
Insert(Int32, String, Int32) 指定文字列を指定回数だけ、指定位置に追加
削除 Clear() すべての文字を削除
Remove(Int32, Int32) 指定範囲の文字を削除
置換 Replace(String, String) すべての指定文字列を、すべて別の指定文字列に置換
Replace(String, String, Int32, Int32) 指定範囲の指定文字列を、すべて別の指定文字列に置換
変換 ToString() Stringに変換
メソッド - StringBuilder クラス (System.Text) | Microsoft Learn

StringBuilderのメソッドはStringのそれとは異なり、インスタンス自身が変更されます。

Append()

オブジェクトを追加するときは、カルチャに依存した文字列となります。

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
DateTime date = new DateTime(2001, 2, 3);

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("ja");
sb1.Append(date); // "2001/02/03 0:00:00"

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en");
sb2.Append(date); // "2/3/2001 12:00:00 AM"
Microsoft Learnから検索