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について解説しました。
StringBuilderはstring型のように+で文字列を連結できずメソッドを呼ぶ必要がありますが、
その分効率的に文字列を操作することが出来ます。
ゲーム中のログを集めてファイルに保存したり、
エディタ拡張から定型的なソースコードを生成したいなど、
大規模な文字列を扱う場面で役に立つと思います。
効率性が求められる場面で、ぜひStringBuilderを活用してみてください!