【C#】string 型の文字列を連結させる6つの方法【StringBuilder/Joinなど】

C#でstring 型の文字列を連結させる6つの方法

はじめに

word-plus-word

C# において、文字列と文字列の連結は + 演算子で可能となります。

using System;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine("Hello" + "World");
		// 出力結果: HelloWorld
	}
}

上記で使用した+ 演算子以外にも文字列を連結させる方法は存在します。本記事ではその方法を6つ紹介します。

+ 演算子を使った文字列連結

+ 演算子による文字列連結はシンプルで直感的なコードになります。

using System;
					
public class Program
{
	public static void Main()
	{
		string text = "Hello" + "World";
		Console.WriteLine(text);
		// 出力結果: HelloWorld
	}
}

ただ、+ 演算子は文字列を結合する度にメモリの領域を確保し直しています

そのため頻繁に文字列を連結する場合は、後に紹介する StringBuilder クラスの使用をオススメします。StringBuilderは文字列連結の度にメモリを確保し直さないため、処理の高速化や効率化に繋がります。

string.Concat を使った文字列連結

string.Concatでは、引数に結合したい文字を渡します。

引数に配列などのコレクションを渡すことで文字列を結合させることも可能です。

using System;
					
public class Program
{
	public static void Main()
	{
		string word1 = "Hello";
		string word2 = "World";
		Console.WriteLine(string.Concat(word1, word2));
		// 出力結果: HelloWorld
		
		string word3 = "!";
		Console.WriteLine(string.Concat(word1, word2, word3));
		// 出力結果: HelloWorld!
		
		string[] words = { "AB", "CD", "EF"};
		Console.WriteLine(string.Concat(words));
		// 出力結果: ABCDEF
	}
}

string.Join を使った文字列連結

string.Join は、コレクション要素を指定した文字で連結します。

第 1 引数に連結させたい文字を指定し、第 2 引数にコレクションを指定します。

using System;
					
public class Program
{
	public static void Main()
	{
		var intArray = new []{1, 2, 3, 4, 5};
		var str1 = string.Join(", ", intArray);
		Console.WriteLine(str1);
		// 出力結果: 1, 2, 3, 4, 5
		
		var str2 = string.Join(" ", intArray);
		Console.WriteLine(str2);
		// 出力結果: 1 2 3 4 5
	}
}

StringBuilder を使った文字列連結

StringBuilder クラスは Append を使って文字列を連結させます。使用には System.Textの名前空間が必要です。

連結後に改行させるAppendLineや、フォーマットを指定できる AppendFormatなども存在します。StringBuilderは文字列連結の度にメモリを確保し直さないため、+演算子と比べて処理の高速化や効率化に繋がります。

using System;
using System.Text;
					
public class Program
{
	public static void Main()
	{
		var sb1 = new StringBuilder();
		sb1.Append("Hello");
		sb1.Append("World");
		Console.WriteLine(sb1.ToString());
		// 出力結果: HelloWorld
		
		var sb2 = new StringBuilder();
		sb2.AppendLine("Hello");
		sb2.AppendLine("World");
		Console.WriteLine(sb2.ToString());
		// 出力結果:
		//  Hello
		//  World
		
		var sb3 = new StringBuilder();
		sb3.AppendFormat("Hello {0}!", "Alex");
		Console.WriteLine(sb3.ToString());
		// 出力結果: Hello Alex!
	}
}

上記の他にも、文字列の中に文字列を挿入する Insertや、文字列を置換する Replaceなどがあります。

参考 StringBuilder クラスMicrosoft Docs

string.Format を使った文字列挿入

string.Formatは第 1 引数に書式を指定し、第 2 引数以降に出力する変数を指定します。

using System;
					
public class Program
{
	public static void Main()
	{
		string name = "Alex";
		string text = string.Format("Hello {0}!", name);
		Console.WriteLine(text);
		// 出力結果: Hello Alex!

		string name1 = "Harry";
		string name2 = "Cecil";
		string text2 = string.Format("Hello {0} and {1}!", name1, name2);
		Console.WriteLine(text2);
		// 出力結果: Hello Harry and Cecil!
	}
}

$ を使った文字列補間

文字列の先頭に$の記号を追加することで、文字列リテラルを挿入文字列として識別します。{}内に変数を指定できるため、コードも直感的で読みやすくなります。

この機能は C# 6 以降で使用可能です。

using System;
					
public class Program
{
	public static void Main()
	{
		string name = "Jack";
		Console.WriteLine($"Hello {name}!");
		// 出力結果: Hello Jack!
	}
}

参考資料