スライドショー

【C#入門】文字列を連結する方法まとめ(+演算子/Concat/Append/Join)

こんにちは!エンジニアの中沢です。

C#には文字列を連結(結合)するためにいくつかのメソッドがあります。

文字列の連結は+演算子で簡単に行うこともできますが、それ以外にも便利なメソッドが用意してあります。

この記事では、


・+演算子で連結する方法
・StringクラスのConcatメソッドで連結する方法
・StringBuilderクラスのAppendメソッド連結する方法

という基本的な内容から、

・文字列の配列を連結するStringクラスのJoinメソッド
・文字列を高速で連結する方法

などの応用的な使い方に関しても解説していきます。

今回はこれらの方法を覚えるために、文字列の連結のさまざまな使い方をわかりやすく解説します!

文字列を連結する方法

+演算子で連結する方法

文字列を連結する一番簡単な方法は、+演算子を使う方法です。

+演算子で連結する方法を次のプログラムで確認してみましょう。

using System;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str1 = "Samurai";
            string str2 = "Engineer";

            string result = str1 + str2;

            Console.WriteLine(result);

            Console.ReadKey();
        }
    }
}

実行結果:

SamuraiEngineer

このように二つの文字列が連結されることが確認できました。

StringクラスのConcatメソッドで連結する方法

StringクラスのConcatメソッドを使っても文字列を連結することができます。

Concatメソッドの引数に、連結したい文字列を指定します。

Concatメソッドで連結する方法を次のプログラムで確認してみましょう。

using System;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str1 = "Samurai";
            string str2 = "Engineer";

            string result = String.Concat(str1, str2);

            Console.WriteLine(result);

            Console.ReadKey();
        }
    }
}

実行結果:

SamuraiEngineer

Concatメソッドで文字列を連結できることが確認できました。

StringBuilderクラスのAppendメソッド連結する方法

ここでは、StringBuilderクラスのAppendメソッドを使って連結する方法を解説します。

Appendメソッドの引数に連結したい文字列を指定して、連結することができます。

次のプログラムで確認してみましょう。

using System;
using System.Text;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str1 = "Samurai";
            string str2 = "Engineer";

            StringBuilder sb = new StringBuilder();
            sb.Append(str1);
            sb.Append(str2);

            string result = sb.ToString();

            Console.WriteLine(result);

            Console.ReadKey();
        }
    }
}

実行結果:

SamuraiEngineer

このプログラムでは、Appendメソッドを使って文字列を連結しています。

StringBuilderクラスの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。

【C#入門】StringBuilderクラスで文字列を追加、挿入、削除、置換
更新日 : 2019年4月17日

文字列の配列を連結するStringクラスのJoinメソッド

ここでは、Joinメソッドを使って文字列の配列を連結する方法を解説します。

Joinメソッドは第1引数に連結するときの区切り文字を指定します。

第2引数に連結する文字列配列を指定します。

Joinメソッドの使い方を次のプログラムで確認してみましょう。

using System;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string[] str = new string[] { "Samurai", "Engineer" };

            string result = String.Join("", str);

            Console.WriteLine(result);

            Console.ReadKey();
        }
    }
}

実行結果:

SamuraiEngineer

このようにして、Joinメソッドを使って文字列の配列を連結することができました。

文字列を高速で連結する方法

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

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

これに対して、「+」演算子で文字列を連結する場合は連結の度にメモリを確保しますので、処理に時間がかかります。

ここでは、たくさんの文字列を連結する場合そ処理速度を、「+」演算子、String.Concatメソッド、StringBuilder.Appendメソッド、String.Joinメソッドで比較してみます。

using System;
using System.Text;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str = "";
            long num = 10000000;
            int t = 0;

            // 「+」で連結
            t = System.Environment.TickCount;
            for (int i = 0; i < num; i++)
            {
                str += "Samurai";
            }
            t = System.Environment.TickCount - t;
            Console.WriteLine("「+」では、{0}ミリ秒", t);


            // String.Concatで連結
            str = "";
            t = System.Environment.TickCount;
            for (int i = 0; i < num; i++)
            {
                str = String.Concat(str, "Samurai");
            }
            t = System.Environment.TickCount - t;
            Console.WriteLine("String.Concatでは、{0}ミリ秒", t);


            // StringBuilder.Appendで連結
            str = "";
            t = System.Environment.TickCount;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < num; i++)
            {
                sb.Append("Samurai");
            }
            str = sb.ToString();
            t = System.Environment.TickCount - t;
            Console.WriteLine("StringBuilder.Appendでは、{0}ミリ秒", t);


            // String.Joinで連結
            str = "";
            t = System.Environment.TickCount;
            string[] src = new string[num];
            for (int i = 0; i < num; i++)
            {
                src[i] = "Samurai";
            }
            str = String.Join("", src);
            t = System.Environment.TickCount - t;
            Console.WriteLine("String.Joinでは、{0}ミリ秒", t);

            Console.ReadKey();
        }
    }
}

実行結果:

「+」では、350532ミリ秒
String.Concatでは、359453ミリ秒
StringBuilder.Appendでは、0ミリ秒
String.Joinでは、15ミリ秒

実行結果から、StringBuilder.AppendとString.Joinが早く、「+」演算子とString.Concatではとくに長い時間がかかっていることがわかります。

大量の文字列を連結する場合には、「+」演算子とString.Concatは使わないようにしましょう。

まとめ

いかがでしたか?

今回は文字列を連結する様々な方法を解説しました。

いくつかメソッドがあるので、状況に応じて使い分けてくださいね。

もし、文字列を連結する方法を忘れてしまったらこの記事を確認してください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説