2022年01月04日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 1037 count

文字列連結: 文字列を合体させるたった7つの冴えたやり方

Written By: 川俣 晶連絡先

この章のテーマ §

 文字列を連結する方法のバリエーションについて学びます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, strning型

解説 §

 文字列を連結する方法はとても沢山あります。

 サンプルソースでは7つの方法を紹介しています。

 最も簡単な方法は文字列と文字列を+演算子で結びつける方法です。string型の変数aとbがあるとき、a+bで文字列を連結できます。

 しかし、他の方法も多くあり、様々なソースなどを見ているとそれらに遭遇することもありますから、他の方法も知っておくと良いと思います。

 全ての方法は一長一短があり、速度や可読性の問題からどれが良いとも言いきれません。特に実行速度は環境やデータによって変動するので、どれが最速とも言えません。

 取りあえず、ビギナーは深く考えないで+演算子で連結しても良いでしょう。他の方法は、それで上手く行かないケースに遭遇してから検討しても良いと思います。

罠の数々 §

  • 実は、Console.WriteLineメソッドではToStringメソッドは呼ばなくても文字列として扱ってくれる。呼んでも呼ばなくても同じ結果になることがサンプルソースの実行結果から分かる
  • 昔は、StringBuilderクラスを使うと速いと言われていたが、改良が進んだ結果そうでもなくなっている。単に、文字列を連結するだけなら特にStringBuilderクラスを使う理由はない
  • 複数の文字列を結合するだけなら、string.Concatメソッドの利用は割とお勧めである
  • 【方法5 Console.WriteLine法】はコンソールに出力する場合にしか使えないように見えるが、実は文字列を出力する系統のクラスにはだいたい同じ機能が含まれているので、応用範囲は広い
  • 文字列を連結する方法はここで紹介している方法だけではないが、良く見る方法はだいたい網羅しているはずだ

参考リンク §

+ および += 演算子 (C# リファレンス)

String.Concat メソッド

String.Format メソッド

StringBuilder クラス

サンプルソース: stringConcat §

const string name = "カルメン";

// 方法1 単純結合法

string s1 = "私の名前は" + name + "です。";

Console.WriteLine(s1);

// 方法2 書式文字列法

string s2 = $"私の名前は{ name }です。";

Console.WriteLine(s2);

// 方法3 string.Concat法

string s3 = string.Concat("私の名前は", name, "です。");

Console.WriteLine(s3);

// 方法4 string.Format法

string s4 = string.Format("私の名前は{0}です。", name);

Console.WriteLine(s4);

// 方法5 Console.WriteLine法

Console.WriteLine("私の名前は{0}です。", name);

// 方法6 StringBuilder+Append法

var sb1 = new System.Text.StringBuilder();

sb1.Append("私の名前は");

sb1.Append(name);

sb1.Append("です。");

Console.WriteLine(sb1.ToString());

Console.WriteLine(sb1);

// 方法7 StringBuilder+AppendFormat法

var sb2 = new System.Text.StringBuilder();

sb2.AppendFormat("私の名前は{0}です。", name);

Console.WriteLine(sb2.ToString());

Console.WriteLine(sb2);

実行結果 §

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

私の名前はカルメンです。

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下の2つのコードは同じだろうか。違うとしたら何が違うのだろうか。

string a = "A";

string b = "B";

string c = "C";

string t;

string r1,r2;

// ケース1

t = a + b;

r1 = t + c;

Console.WriteLine(r1);

// ケース2

r2 = a + b + c;

Console.WriteLine(r2);

  1. 同じ。どちらもABCという結果を得る
  2. 違う。ケース2は文字列加算の結果により新しい文字列を1つだけ生成するが、ケース1は中間結果の文字列も生成するので文字列を2回生成する。つまり効率で劣る

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
05日
パターン: C#のソースコードの表現力を更に上げるスパイス
3days 0 count
total 1089 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
03日
in、out、ref、paramsキーワード: メソッドの引数を彩る多彩なオプション達
3days 0 count
total 1281 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220104093439
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.