【C#】StringBuilderクラスとは

StringBuilderクラスとは

StringBuilderクラスは、文字列に変更を加えたい場合に使用します

C#で文字列を変更する場合、新しくメモリを確保する必要があります。

文字列を何度も変更する必要がある場合、StringBuilderクラスを使うことにより、メモリの無駄遣いを減らすことができます。

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/api/system.text.stringbuilder?view=net-5.0

StringBuilderクラスは、System.Text名前空間から呼び出します。

StringBuilderクラスはnew演算子を使ってインスタンスを生成し、StringBuilderクラスのオブジェクトに格納して使用します。

StringBuilderクラスのオブジェクトから以下のメソッドを呼び出すことができます。

メソッド名 説明
Append 末尾に文字列を追加
AppendFormat 書式を設定して文字列を追加
Insert 指定したインデックス番号に文字列を挿入
Remove 指定した文字数を削除
Replace 指定したインデックス番号で、指定した文字を置換

それぞれのメソッドをみていきます。

 

Append(文字列の追加)

Appendメソッドを用いることで、末尾に文字列を追加することができます。

using System;
using System.Text; // usingに追加

namespace StBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder("Appendメソッドを用いることで、");

            sb.Append("末尾に文字列を追加することができます。");

            Console.WriteLine(sb);
        }
    }
}

実行結果:

Appendメソッドを用いることで、末尾に文字列を追加することができます。

 

AppendFormat(書式を指定して追加)

数値や日付を文字列に変換して追加する場合は、AppendFormatメソッドを使って書式を指定します。

using System;
using System.Text;

namespace StBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder("今日は、令和");

            int year = 3;
            int month = 4;
            int day = 29;

            sb.AppendFormat("{0}年の{1}月{2}日です。", year, month, day); // {0}にyear、{1}にmonth、{2}にdayがそれぞれ入ります。

            Console.WriteLine(sb);
        }
    }
}

実行結果:

今日は、令和3年の4月29日です。

 

Insert(文字列の挿入)

Insertメソッドを用いることで末尾ではなく、文字列の中に文字を追加することができます。

Insertメソッドでは、第1引数で挿入位置のインデックス番号を指定し、第2引数で挿入する文字列を指定します。

なお、第1引数のインデックス番号は0から始まります

using System;
using System.Text;

namespace StBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder("文字列です。");

            string word = "挿入はInsert"; // 挿入する文字列をword変数に代入

            sb.Insert(3, word); // 第1引数にインデックス番号、第2引数に挿入する文字列を指定

            Console.WriteLine(sb);
        }
    }
}

実行結果:

文字列挿入はInsertです。

 

Remove(文字列の削除)

文字列の一部を削除したい場合には、Removeメソッドを使用します。

第1引数で削除する文字列の開始位置をインデックス番号で指定し、第2引数で削除する文字数を指定します。

using System;
using System.Text;

namespace StBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder("文字列の削除はRemoveメソッドです。");

            Console.WriteLine(sb.Remove(7, 13)); // 第1引数にインデックス番号、第2引数に削除する文字数を指定
        }
    }
}

実行結果:

文字列の削除は

 

Replace(文字列の置換)

文字列の一部を別の文字列で置き換えたい場合は、Replaceメソッドを使用します。

第1引数に置き換えられる文字列を指定し、第2引数には置き換えたあとの文字列を指定します。

using System;
using System.Text;

namespace StBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder("文字列の置換はRemoveメソッドです。");

            string word = "Replaceメソッドです。";

            Console.WriteLine(sb.Replace("Removeメソッドです。", word)); // 第1引数に置き換えられる文字列を指定、第2引数に置き換えたあとの文字列を指定
        }
    }
}

実行結果:

文字列の置換はReplaceメソッドです。

 

まとめ

StringBuilderクラスを使うと、文字列を変更するたびにメモリを確保する必要がありません。

そのため、多くの文字列を変更する場合、変更の度にメモリの確保で余計な処理時間を取られることがないため、高速での処理が可能となります。

一方で「+」記号で文字列を連結することもできます。

この場合、文字列を連結する度にメモリを確保してしまうため、処理に時間がかかってしまいます。

よって、多くの文字を操作する必要がある場合には、StringBuilderクラスのメソッドを使うことが望ましいです。

また、実際の開発現場においてStringBuilderクラスは、データ抽出時(SELECT文)などに用いられることも多いです

 

おすすめ書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)