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] | 指定位置の文字 |
現在の文字数より小さな長さを指定すると、その長さまで切り詰められます。逆に大きな長さを指定すると、その長さまでUnicode NULL文字 (U+0000) で埋められます。
StringBuilder sb = new StringBuilder(); sb.Append("123456789"); sb.Length = 3; // "123" (3文字に、切り詰められている) sb.Length = 5; // "123\0\0" (5文字まで、NULL文字で埋められている)
.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のメソッドはStringのそれとは異なり、インスタンス自身が変更されます。
オブジェクトを追加するときは、カルチャに依存した文字列となります。
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"