[C#] String.Formatメソッドの使い方 – 文字列の書式指定

String.Formatメソッドは、指定した書式に従って文字列を整形するために使用されます。

プレースホルダー(例:{0}, {1})を使って、引数を指定した位置に挿入します。

例えば、String.Format("名前: {0}, 年齢: {1}", "太郎", 25)は「名前: 太郎, 年齢: 25」という文字列を生成します。

書式指定子(例:{0:C}で通貨形式、{0:D}で整数形式)を使うことで、数値や日付のフォーマットも調整可能です。

この記事でわかること
  • String.Formatメソッドの基本的な使い方
  • 書式指定子を利用した数値の表示
  • 日付や時刻のフォーマット方法
  • カスタム書式指定の活用法
  • String.Formatのパフォーマンスと代替手段

目次から探す

String.Formatメソッドとは

String.Formatメソッドは、C#において文字列を整形するための非常に便利な機能です。

このメソッドを使用することで、文字列内にプレースホルダーを埋め込み、動的に値を挿入することができます。

プレースホルダーは、波括弧 {} で囲まれた数値で指定され、引数として渡された値がその位置に挿入されます。

例えば、ユーザー名や日付、数値などを含むメッセージを作成する際に、String.Formatを利用することで、コードの可読性が向上し、メンテナンスが容易になります。

また、書式指定子を使用することで、数値や日付の表示形式を柔軟に変更することも可能です。

このように、String.Formatメソッドは、C#プログラミングにおいて非常に重要な役割を果たしています。

基本的な使い方

プレースホルダーの基本構文

String.Formatメソッドの基本的な構文は以下の通りです。

string result = String.Format("文字列 {0} に値 {1} を挿入します。", 値1, 値2);

ここで、{0}{1} はプレースホルダーと呼ばれ、引数として渡された値がその位置に挿入されます。

プレースホルダーのインデックスは0から始まります。

複数の引数を使用する方法

複数の引数を使用する場合も、String.Formatメソッドは非常に簡単です。

以下の例では、名前と年齢を挿入しています。

string name = "太郎";
int age = 25;
string result = String.Format("{0}さんは{1}歳です。", name, age);

このコードを実行すると、"太郎さんは25歳です。"という結果が得られます。

太郎さんは25歳です。

引数の順序を変更する方法

引数の順序を変更することも可能です。

プレースホルダーのインデックスを変更することで、異なる順序で値を挿入できます。

string name = "花子";
int age = 30;
string result = String.Format("年齢は{1}歳で、名前は{0}です。", name, age);

このコードを実行すると、"年齢は30歳で、名前は花子です。"という結果が得られます。

年齢は30歳で、名前は花子です。

書式指定子の使い方

数値の書式指定

C#のString.Formatメソッドでは、数値をさまざまな形式で表示するための書式指定子を使用できます。

以下に代表的な書式指定子を示します。

通貨形式(C)

通貨形式は、金額を通貨記号付きで表示するために使用します。

decimal price = 1234.56m;
string result = String.Format("価格は{0:C}です。", price);
価格は¥1,234.56です。

固定小数点形式(F)

固定小数点形式は、小数点以下の桁数を指定して数値を表示します。

double number = 1234.5678;
string result = String.Format("数値は{0:F2}です。", number);
数値は1234.57です。

パーセント形式(P)

パーセント形式は、数値をパーセント表示に変換します。

double ratio = 0.1234;
string result = String.Format("割合は{0:P}です。", ratio);
割合は12.34%です。

日付と時刻の書式指定

日付や時刻を表示する際にも、書式指定子を使用して柔軟にフォーマットできます。

短い日付形式(d)

短い日付形式は、日付を短い形式で表示します。

DateTime date = new DateTime(2023, 10, 1);
string result = String.Format("日付は{0:d}です。", date);
日付は2023/10/1です。

長い日付形式(D)

長い日付形式は、日付を詳細な形式で表示します。

DateTime date = new DateTime(2023, 10, 1);
string result = String.Format("日付は{0:D}です。", date);
日付は2023年10月1日(日曜日)です。

時刻形式(T)

時刻形式は、時刻を表示するために使用します。

DateTime time = new DateTime(2023, 10, 1, 14, 30, 0);
string result = String.Format("時刻は{0:T}です。", time);
時刻は14:30:00です。

文字列の書式指定

文字列に対しても、書式指定を行うことができます。

文字列の右揃えと左揃え

文字列を右揃えまたは左揃えで表示することができます。

string text = "こんにちは";
string resultRight = String.Format("{0,10}", text); // 右揃え
string resultLeft = String.Format("{0,-10}", text); // 左揃え
こんにちは
こんにちは

文字列の切り詰め

文字列を指定した長さで切り詰めることも可能です。

string longText = "これは非常に長い文字列です。";
string result = String.Format("{0:.}", longText.Substring(0, 10)); // 最初の10文字を表示
これは非常に

カスタム書式指定

C#のString.Formatメソッドでは、カスタム書式指定を使用して、数値や日付の表示形式をさらに細かく制御することができます。

以下に、数値と日付のカスタム書式指定の具体例を示します。

数値のカスタム書式指定

桁数の指定

数値の桁数を指定することで、表示する桁数を固定することができます。

以下の例では、整数部分を3桁、整数部分が不足する場合はゼロで埋めます。

int number = 42;
string result = String.Format("{0:000}", number);
042

小数点以下の桁数指定

小数点以下の桁数を指定することで、表示する小数点以下の桁数を制御できます。

以下の例では、小数点以下を2桁表示します。

double value = 123.4;
string result = String.Format("{0:0.00}", value);
123.40

日付と時刻のカスタム書式指定

日付や時刻に対しても、カスタム書式指定を使用して表示形式を変更できます。

年、月、日のカスタム表示

年、月、日をカスタム形式で表示することができます。

以下の例では、年を4桁、月を2桁、日を2桁で表示します。

DateTime date = new DateTime(2023, 10, 1);
string result = String.Format("{0:yyyy/MM/dd}", date);
2023/10/01

時間、分、秒のカスタム表示

時間、分、秒をカスタム形式で表示することも可能です。

以下の例では、24時間形式で時刻を表示します。

DateTime time = new DateTime(2023, 10, 1, 14, 30, 45);
string result = String.Format("{0:HH:mm:ss}", time);
14:30:45

String.Formatの応用例

String.Formatメソッドは、さまざまな場面で活用できる強力な機能です。

以下に、具体的な応用例をいくつか示します。

数値のフォーマットを使った計算結果の表示

計算結果を表示する際に、数値のフォーマットを使用して見やすく整形することができます。

以下の例では、商品の価格と消費税を計算し、結果を通貨形式で表示します。

decimal price = 1000m; // 商品の価格
decimal taxRate = 0.1m; // 消費税率
decimal totalPrice = price + (price * taxRate); // 総額
string result = String.Format("商品の価格: {0:C}, 消費税: {1:C}, 総額: {2:C}", price, price * taxRate, totalPrice);
商品の価格: ¥1,000.00, 消費税: ¥100.00, 総額: ¥1,100.00

日付フォーマットを使ったログ出力

ログ出力において、日付や時刻を適切な形式で表示することは重要です。

以下の例では、ログメッセージに現在の日付と時刻を含めています。

DateTime now = DateTime.Now;
string logMessage = String.Format("[{0:yyyy/MM/dd HH:mm:ss}] 処理が完了しました。", now);
[2023/10/01 14:30:00] 処理が完了しました。

文字列の整形によるレポート生成

レポートを生成する際に、String.Formatを使用してデータを整形することができます。

以下の例では、学生の成績を整形して表示します。

string studentName = "佐藤";
int score = 85;
string result = String.Format("学生名: {0}, 成績: {1}点", studentName, score);
学生名: 佐藤, 成績: 85点

このように、String.Formatメソッドを活用することで、数値や日付、文字列を効果的に整形し、見やすい出力を実現できます。

String.Formatのパフォーマンスと代替手段

String.Formatメソッドは非常に便利ですが、パフォーマンスに関して考慮すべき点があります。

ここでは、String.Formatのパフォーマンス、StringBuilderとの比較、C# 6.0以降の文字列補間との違いについて説明します。

String.Formatのパフォーマンスの考慮点

String.Formatメソッドは、内部で文字列を生成するため、特に多くの文字列を連結する場合にはパフォーマンスが低下することがあります。

特に、ループ内で頻繁に呼び出す場合は、パフォーマンスに影響を与える可能性があります。

以下のようなケースでは、パフォーマンスを考慮する必要があります。

  • 大量のデータを処理する場合
  • 文字列の連結を頻繁に行う場合

StringBuilderとの比較

StringBuilderは、可変長の文字列を効率的に扱うためのクラスです。

String.Formatと比較して、StringBuilderは文字列の連結や変更が多い場合にパフォーマンスが向上します。

以下の例では、StringBuilderを使用して文字列を構築しています。

using System.Text;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
    sb.AppendFormat("アイテム {0}\n", i);
}
string result = sb.ToString();

このように、StringBuilderを使用することで、パフォーマンスを向上させることができます。

C# 6.0以降の文字列補間($”{}”)との違い

C# 6.0以降では、文字列補間という新しい機能が追加されました。

文字列補間を使用すると、より直感的に文字列を構築できます。

以下の例では、文字列補間を使用して同じ結果を得ています。

string name = "太郎";
int age = 25;
string result = $"名前: {name}, 年齢: {age}歳";

このように、文字列補間はコードが簡潔で読みやすく、パフォーマンスも向上する場合があります。

ただし、String.Formatと比較して、特に大規模な文字列操作においては、どちらが適しているかは状況によります。

まとめ

  • String.Formatは便利だが、パフォーマンスに注意が必要。
  • StringBuilderは大量の文字列操作に適している。
  • C# 6.0以降の文字列補間は、より直感的で可読性が高い。

よくある質問

String.Formatでエスケープ文字を使うには?

String.Formatメソッドでエスケープ文字を使用する場合、波括弧 {} をそのまま文字列として表示したいときは、波括弧を2つ重ねて {} と記述します。

以下の例では、波括弧をエスケープしています。

string result = String.Format("これは{{0}}の例です。");
これは{0}の例です。

String.Formatでnull値を扱うには?

String.Formatメソッドでnull値を扱う場合、null値を適切に表示するために、条件演算子を使用することが一般的です。

以下の例では、null値をチェックして、適切なメッセージを表示しています。

string name = null;
string result = String.Format("名前: {0}", name ?? "未設定");
名前: 未設定

String.Formatで文化依存のフォーマットを指定するには?

String.Formatメソッドでは、文化依存のフォーマットを指定することができます。

これを行うには、CultureInfoクラスを使用して、特定の文化を指定します。

以下の例では、アメリカの文化を指定して数値をフォーマットしています。

using System.Globalization;
decimal price = 1234.56m;
string result = String.Format(CultureInfo.GetCultureInfo("en-US"), "価格: {0:C}", price);
価格: $1,234.56

このように、String.Formatメソッドを使用することで、エスケープ文字やnull値、文化依存のフォーマットを柔軟に扱うことができます。

まとめ

この記事では、C#のString.Formatメソッドの基本的な使い方から、書式指定子やカスタム書式指定、応用例、パフォーマンスの考慮点まで幅広く解説しました。

特に、数値や日付のフォーマット、文字列の整形方法について具体的な例を通じて理解を深めることができたでしょう。

今後は、実際のプログラミングにおいてString.Formatメソッドを活用し、より効率的で可読性の高いコードを書くことを目指してみてください。

  • URLをコピーしました!
目次から探す