カテゴリ: C# 更新日: 2025/10/27

C#の文字列を繰り返し結合する方法(StringBuilderの活用)

C#の文字列を繰り返し結合する方法(StringBuilderの活用)
C#の文字列を繰り返し結合する方法(StringBuilderの活用)

先生と生徒の会話形式で理解しよう

生徒

「先生、C#でたくさんの文字列を繰り返し結合したいんですが、どうやってやるのが良いんですか?」

先生

「とても良い質問ですね。C#で文字列を何度も結合するときは、StringBuilderというクラスを使うのが便利ですよ。」

生徒

StringBuilderですか? 文字列を結合するなら、普通に+でつなげればいいんじゃないんですか?」

先生

「たしかに少ない回数ならそれでも問題ありません。でも、大量の文字列を繰り返し結合する場合は、StringBuilderを使うほうが圧倒的に速くて効率が良いんです。」

生徒

「なるほど…!どんなふうに使うのか、実際のコードで見せてもらえますか?」

先生

「もちろん!それでは、StringBuilderを使った文字列結合の基本から学んでいきましょう。」

1. C#で文字列を結合する基本

1. C#で文字列を結合する基本
1. C#で文字列を結合する基本

C#では、文字列をつなげるときに「文字列結合」という操作を行います。たとえば、「こんにちは」と「世界」を結合して「こんにちは世界」としたいとき、単純に+記号を使って書くことができます。


string message = "こんにちは" + "世界";
Console.WriteLine(message);

こんにちは世界

このように、文字列を少しだけ結合する場合は+で十分です。しかし、ループ(繰り返し処理)の中で何百回・何千回も結合を行うと、処理速度が遅くなってしまうのです。

2. 文字列結合が遅くなる理由とは?

2. 文字列結合が遅くなる理由とは?
2. 文字列結合が遅くなる理由とは?

文字列(string)は不変(immutable)オブジェクトです。これは、一度作られた文字列の内容は変更できないという意味です。たとえば、次のようなコードを考えてみましょう。


string text = "";
for (int i = 0; i < 5; i++)
{
    text = text + i;
}
Console.WriteLine(text);

01234

このコードでは、毎回text + iのたびに新しい文字列を作り直しているため、処理が重くなります。たった5回なら問題ありませんが、1万回・10万回になると、パソコンの動作が遅くなったり、メモリを無駄に使ったりしてしまいます。

3. StringBuilderを使って効率的に文字列を結合しよう

3. StringBuilderを使って効率的に文字列を結合しよう
3. StringBuilderを使って効率的に文字列を結合しよう

ここで登場するのが、StringBuilder(ストリングビルダー)クラスです。これは、文字列を扱うための便利なクラスで、繰り返し結合しても高速に動作します。使い方はとても簡単です。


using System.Text; // StringBuilderを使うために必要

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 5; i++)
{
    sb.Append(i); // 文字列を追加
}

Console.WriteLine(sb.ToString()); // まとめて出力

01234

Appendメソッドは、「追加する」という意味です。この方法なら、何回繰り返しても新しい文字列を毎回作り直さないので、処理が非常に高速になります。

4. StringBuilderと通常の結合の速度の違い

4. StringBuilderと通常の結合の速度の違い
4. StringBuilderと通常の結合の速度の違い

実際に速度を比べてみると、差は歴然です。たとえば、10万回文字列を結合する場合を想定してみましょう。


using System;
using System.Diagnostics;
using System.Text;

class Program
{
    static void Main()
    {
        Stopwatch sw = new Stopwatch();

        // 通常の文字列結合
        sw.Start();
        string text = "";
        for (int i = 0; i < 100000; i++)
        {
            text += "a";
        }
        sw.Stop();
        Console.WriteLine("通常の結合: " + sw.ElapsedMilliseconds + "ms");

        // StringBuilderでの結合
        sw.Restart();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100000; i++)
        {
            sb.Append("a");
        }
        sw.Stop();
        Console.WriteLine("StringBuilder: " + sw.ElapsedMilliseconds + "ms");
    }
}

このように実行すると、StringBuilderのほうが圧倒的に早いことがわかります。特に大量の文字列を扱うアプリケーションでは、StringBuilderを使うのが必須といえるでしょう。

5. StringBuilderの便利なメソッド

5. StringBuilderの便利なメソッド
5. StringBuilderの便利なメソッド

StringBuilderには、文字列を扱うための便利なメソッドがたくさんあります。ここではよく使う3つを紹介します。

  • Append(string value):文字列を追加します。
  • AppendLine(string value):文字列を追加して改行します。
  • Clear():中身をすべて削除します。

次の例では、AppendLineClearを使ってみましょう。


using System.Text;

StringBuilder sb = new StringBuilder();
sb.AppendLine("1行目");
sb.AppendLine("2行目");
sb.AppendLine("3行目");

Console.WriteLine(sb.ToString()); // 中身を表示

sb.Clear(); // 内容をリセット
sb.Append("再利用できます!");
Console.WriteLine(sb.ToString());

1行目
2行目
3行目
再利用できます!

このように、StringBuilderは一度作っても再利用ができるため、メモリの無駄が少なく効率的に文字列を扱うことができます。

6. どんなときにStringBuilderを使うべき?

6. どんなときにStringBuilderを使うべき?
6. どんなときにStringBuilderを使うべき?

StringBuilderを使うタイミングの目安は、以下のようなケースです。

  • ループで文字列を何度も追加・結合するとき
  • ログのように長いテキストをまとめて作るとき
  • パフォーマンス(処理速度)を重視したいとき

逆に、短い文字列を数回だけ結合する程度なら、+でつなげても問題ありません。使い分けが大切です。

実際の開発現場でも、ループの中で文字列を扱う処理がある場合は、ほぼ必ずStringBuilderが使われています。C#を使ううえで覚えておくと、とても役立つ知識です。

カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法