English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# StringBuilder

C#では、文字列型は変更不可です。これは、一旦作成されると変更できないことを意味します。例えば、「Hello World!」という新しい文字列はヒープ上のメモリ空間を占めます。現在、「Hello World!」を「Hello World! from Tutorials Teacher」に変更すると、メモリヒープ上に新しい文字列オブジェクトが作成され、元の文字列は同じメモリアドレスで変更されません。元の文字列に何度もリプレース、追加、削除、または新しい文字列を挿入して変更を行うと、この動作はパフォーマンスに影響を与えます。

文字列オブジェクトのメモリ割り当て

この問題を解決するために、C#のStringBuilderはSystem.Textネームスペースで導入されました。StringBuilderはメモリ内に新しいオブジェクトを作成するのではなく、変更された文字列を収容するためにメモリを動的に拡張します。

StringBuilderオブジェクトのメモリ割り当て

StringBuilderオブジェクトの作成

newキーワードを使用して初期文字列を渡してStringBuilderクラスのオブジェクトを作成できます。以下の例では、StringBuilderオブジェクトの作成を示します。

using System.Text; //導入
            
StringBuilder sb = new StringBuilder(); //後で文字列を追加します
//または
StringBuilder sb = new StringBuilder("Hello World!");

または、StringBuilderオブジェクトの最大容量を指定する重载コンストラクタを使用することもできます。以下のようになります。

StringBuilder sb = new StringBuilder(50); //後で文字列を追加します
//または
StringBuilder sb = new StringBuilder("Hello World!", 50);

その点で、C#はメモリヒープ上に並べ替えて最大50つのスペース。指定された容量に達すると、その容量は自動的に2倍に増加します。また、capacityやlengthプロパティを使用してStringBuilderオブジェクトの容量を設定または取得できます。

指定されたインデックスの文字を取得または設定するためにforループを使用できます。

StringBuilder sb = new StringBuilder("Hello World!");
for(int i = 0; i < sb.Length; i++){
 Console.Write(sb[i]); // 出力:Hello World!
}

StringBuilderから文字列の取得

StringBuilderは文字列ではありません。ToString()メソッドを使用してStringBuilderオブジェクトから文字列を取得します。

StringBuilder sb = new StringBuilder("Hello World!");
var greet = sb.ToString(); //「 Hello World! 」を返します「Hello World!」

StringBuilderに追加/文字列を追加

Append()メソッドを使用して現在のStringBuilderオブジェクトの末尾に文字列を追加します。StringBuilderがまだ何も含んでいない場合、それを追加します。AppendLine()メソッドは、文字列の末尾に改行符を追加します。

StringBuilder sb = new StringBuilder();
sb.Append("Hello ");
sb.AppendLine("World!");
sb.AppendLine("Hello C#");
Console.WriteLine(sb);
出力:
Hello World!
Hello C#

整形された文字列をStringBuilderに追加

指定されたフォーマットに従って入力文字列を整形し、それを追加するAppendFormat()メソッドを使用します。

StringBuilder sbAmout = new StringBuilder("あなたの合計金額は ");
sbAmout.AppendFormat("{0:C} ", 25);
Console.WriteLine(sbAmout);//出力:あなたの合計金額は$25.00

StringをStringBuilderに挿入

Insert()メソッドを使用してStringBuilderオブジェクトの指定されたインデックスに文字列を挿入します。

StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5," C#"); 
Console.WriteLine(sb); //出力:Hello C# World!

StringBuilder中の文字列を削除

指定されたインデックスから指定された長さまでの文字列を削除するRemove()メソッドを使用します。

StringBuilder sb = new StringBuilder("Hello World!",50);
sb.Remove(6, 7);
Console.WriteLine(sb); //出力:こんにちは

StringBuilder中の文字列を置き換え

使用Replace()メソッドで指定された文字列のすべてのインスタンスを指定された置換文字列に置き換えます。

StringBuilder sb = new StringBuilder("Hello World!");
sb.Replace("World", "C#");
Console.WriteLine(sb);//出力:Hello C#!
覚えておくべきポイント:
  1. StringBuilder は可変です。

  2. StringBuilder が追加する複数の文字列を追加する場合、stringよりも高速です。

  3. 三つの文字列または四つの文字列以上を追加する必要がある場合、StringBuilderを使用してください。

  4. StringBuilder オブジェクトに文字列を追加したり、接続したりするために Append() メソッドを使用します。

  5. StringBuilder オブジェクトから文字列を検索するために ToString() メソッドを使用します。