こんにちは!エンジニアの中沢です。
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クラスの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。
文字列の配列を連結する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は使わないようにしましょう。
まとめ
いかがでしたか?
今回は文字列を連結する様々な方法を解説しました。
いくつかメソッドがあるので、状況に応じて使い分けてくださいね。
もし、文字列を連結する方法を忘れてしまったらこの記事を確認してください!