C で文字列を連結する#

Tip

この記事は、少なくとも 1 つのプログラミング言語を既に知っており、C# を学習している開発者向けの 基礎 セクションの一部です。 プログラミングを初めて使用する場合は、最初に「 はじめ に」チュートリアルから始めてください。

別の言語から来ていますか? C# での + を使った連結は、Java や JavaScript と同様です。 C# は、変数から文字列を構築する場合に推奨される方法として、JavaScript テンプレート リテラルや Python f 文字列と同様に、文字列補間 ($"{x}") を追加します。 ループ内で文字列を構築する場合、C# では、JavaのStringBuilderと同様に、StringBuilderが提供されます。

連結 では、1 つの文字列が別の文字列の末尾に追加され、新しい文字列が生成されます。 C# では複数の連結方法が提供されます。最適な選択は、固定された値のセットまたはコレクションを結合するか、ループ内で文字列を 1 つずつ構築するかによって異なります。

文字列リテラルを連結する

文字列リテラルまたは定数を + と連結すると、コンパイラはコンパイル時にそれらを結合します。 長いリテラルを複数の行に分割すると、実行時コストなしでソースの読みやすさが向上します。

// The compiler joins adjacent string literals at compile time,
// so splitting a long literal across lines has no run-time cost.
string message =
    "This is the first sentence of a longer message. " +
    "This is the second sentence. " +
    "This is the third and final sentence.";

Console.WriteLine(message);
// => This is the first sentence of a longer message. This is the second sentence. This is the third and final sentence.

+演算子と+=演算子を使用する

文字列変数を結合するには、 + 演算子を使用して新しい文字列を生成するか、既存の文字列に追加する += します。 +演算子は直感的で、1 つの式で複数の演算子を連結した場合でも、コンパイラは文字列の内容を 1 回だけコピーします。

string name = "Alex";
string day = "Monday";

// Use + to build a string from variables and literals.
string greeting = "Hello " + name + ". Today is " + day + ".";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.

// Use += to append to an existing string.
greeting += " How are you today?";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday. How are you today?

Note

文字列連結では、C# は null 文字列を空の文字列と同じように扱うので、 null 連結すると結果に何も追加されません。

文字列補間を使用する

文字列に式の評価結果を埋め込むには、{0}{1} トークンのような位置プレースホルダーではなく、C スタイルの書式設定から String.Format が継承した文字列補間を使用することをお勧めします。 補間では、各式がその値が表示される場所にインラインで配置されるため、結果の文字列は読み取り可能なままであり、引数を誤って配置することはできません。

string name = "Alex";
string day = "Monday";

// String interpolation reads better than a chain of + operators.
string greeting = $"Hello {name}. Today is {day}.";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.

すべての補間式がそれ自体が定数文字列である場合は、補間された結果を const 文字列に割り当てることができます。

文字列のコレクションを結合する

コレクションの要素を結合するには、 String.Concat を使用して区切り記号なしで結合するか、 String.Join を使用して各要素の間に区切り記号を配置します。

string[] words = ["The", "quick", "brown", "fox"];

// Concat joins the sequence with no separator.
string runTogether = string.Concat(words);
Console.WriteLine(runTogether);
// => Thequickbrownfox

// Join places a separator between each element.
string sentence = string.Join(' ', words);
Console.WriteLine(sentence);
// => The quick brown fox

string.Join は、コンマ区切り値やスペース区切りの単語など、区切られた出力が必要な場合に最適なツールです。

ループ内に文字列を作成する

文字列は不変であるため、各 + または += 操作によって新しい文字列が作成されます。 ループに多数の部分を追加すると、その割り当てが加算されます。 StringBuilder クラスは、代わりに 1 つのバッファーで結果をビルドします。

// StringBuilder builds a string in place, which suits loops
// that append many pieces.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
    builder.AppendLine($"Line {i}");
}

Console.Write(builder.ToString());
// => Line 1
// => Line 2
// => Line 3

要素数が多い場合や、コンパイル時点で不明な場合は、StringBuilder を使用します。 固定の小さな値セットの場合、 + 演算子と文字列補間がより明確になります。 各アプローチが最適に実行されるタイミングのガイダンスについては、「stringStringBuilderの種類」を参照してください。

こちらも参照ください