StringBuilderとは?

StringBuilderとは、文字列操作を効率的に行うためのクラスで、

主にC#Javaなどの言語で使用できます。

通常の文字列との違い

C#で文字列を扱うstring型は、immutable(変更不可)です。

これは生成された後に変更しようとすると別のオブジェクトが生成され、

内容がコピーされます。

+演算子で文字列を連結する度に別のオブジェクトが作られることになります。

その度にメモリを再割り当てするため、大量の文字列操作を行う場合、

パフォーマンスが低下する可能性があります。

これを避けたい時に使えるのがStringBuilderです。

StringBuilderはその問題を回避し、

内部でバッファを管理し足りなくなれば自動的に拡張できるようになっています。

用途

ちょっとした文字列を扱うには大げさかもしれませんが、

例えば、

  • アプリケーション実行時のログを生成したい
  • 簡易な設定を元にソースコードを生成したい
  • 大規模な csv や json などテキストベースのデータを出力したい

といった用途に向いていると思います。

他にもメモリ効率や処理速度を意識したい場面で使用すると良いでしょう。

StringBuilderの使い方

初期化

コンストラクタで初期化できます。

指定する引数の違うコンストラクタがいくつかあります。

// 通常
StringBuilder builder = new StringBuilder();
// 文字列を渡す場合
StringBuilder builder = new StringBuilder("テスト");
// 内部のバッファを指定する
StringBuilder builder = new StringBuilder(100000);

追加

Appendメソッドで文字列を追加し、連結できます。

AppendLineメソッドの場合、文字列を追加した後に改行を追加します。

// 続けて連結する -> 1234567890
builder.Append("12345");
builder.Append("67890");

// 最後に改行を追加する
builder.AppendLine("12345");
builder.AppendLine("67890");

挿入

Insertメソッドで文字列を挿入できます。

挿入位置と文字列を指定します。

builder.Append("123456");
builder.Insert(3, "ABC");

// 実行結果 -> 123ABC456

削除

Removeメソッドで削除できます。

削除の開始位置と文字数を指定します。

builder.Append("123456");
builder.Remove(2,2);

// 実行結果 -> 1256

置換

Replaceメソッドで文字列を置き換えることが出来ます。

置き換え前と置き換え後の文字列を指定します。

builder.Append("111111");
builder.Replace("1", "A");

// 実行結果 -> AAAAAA

文字列化

StringBuilder を文字列にするには、

string 型の変数に代入するか、ToString メソッドを使用します。

builder.Append("123456");
string result = builder.ToString();
Debug.Log(result);

// 実行結果 -> 123456

まとめ

今回はStringBuilderについて解説しました。

StringBuilderstring型のように+で文字列を連結できずメソッドを呼ぶ必要がありますが、

その分効率的に文字列を操作することが出来ます。

ゲーム中のログを集めてファイルに保存したり、

エディタ拡張から定型的なソースコードを生成したいなど、

大規模な文字列を扱う場面で役に立つと思います。

効率性が求められる場面で、ぜひStringBuilderを活用してみてください!