今回は、C#のstring.Formatで書式を指定する方法についてご紹介します。
string.Formatとは
C#のstring.Formatメソッドは、中括弧 { } で示されるプレースホルダーに値を埋め込むことで、柔軟な文字列の整形を行うための機能です。
たとえば {0} のように記述すると、指定した値がその位置に置き換わります。
引数を複数渡す場合は、{0}, {1}, {2} のようにインデックスを増やすことで対応できます。
この方法を使うと、煩雑になりがちな文字列の連結処理を簡潔に記述できるため、可読性と保守性が向上します。
基本的な使い方
最も基本的な使い方は、string.Format(“書式文字列”, 値…) という構文です。
書式文字列内のプレースホルダーに、メソッドの引数で指定した値が順番に埋め込まれます。
プレースホルダーには インデックス、整列(Alignment)、フォーマット指定子 を指定することができます。
1 2 3 4 5 6 |
// プレースホルダーを使った基本的な例 string name = "Alice"; // 名前 int age = 30; // 年齢 string result = string.Format("名前: {0}, 年齢: {1}", name, age); Console.WriteLine(result); // コンソールに結果を出力 |
名前: Alice, 年齢: 30
インデックスは 0 から始まり、指定した順番に従って引数が置き換えられます。
インデックスの誤りはエラー(FormatException)の原因となるため注意が必要です。
実用的な具体例
ここでは、数値や日付などの書式指定を組み合わせて使う例を紹介します。
数値のフォーマット
数値に対しては、C (通貨), D (10進数), N (カンマ区切り), F (固定小数点), P (パーセント), E (指数) などのフォーマット指定子を使うことができます。
指定子と桁数を組み合わせて、出力形式を柔軟にコントロールすることが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 数値のフォーマット例 double price = 1234.56; // 金額 int number = 42; // 整数 double percent = 0.856; // パーセント double bigValue = 1234567.89; // 大きい数値 string formattedPrice = string.Format("通貨形式: {0:C}", price); string formattedNumber = string.Format("10進数(5桁): {0:D5}", number); string formattedPercent = string.Format("パーセント: {0:P1}", percent); string formattedBigValue = string.Format("カンマ区切り: {0:N2}", bigValue); Console.WriteLine(formattedPrice); Console.WriteLine(formattedNumber); Console.WriteLine(formattedPercent); Console.WriteLine(formattedBigValue); |
通貨形式: ¥1,234.56
10進数(5桁): 00042
パーセント: 85.6 %
カンマ区切り: 1,234,567.89
日付・時刻のフォーマット
日付や時刻を整形する場合は、d や D などの標準指定子と、yyyy/MM/dd などのカスタム指定子が用意されています。
目的に応じて柔軟に組み合わせ、見やすい出力を心がけます。
1 2 3 4 5 6 7 8 9 10 11 |
// 日付・時刻のフォーマット例 DateTime now = DateTime.Now; // 現在日時 DateTime specialDate = new DateTime(2025, 12, 31); // 特定の日付 string shortFormat = string.Format("短い日付形式: {0:d}", now); string longFormat = string.Format("長い日付形式: {0:D}", now); string customDate = string.Format("カスタム形式: {0:yyyy/MM/dd}", specialDate); Console.WriteLine(shortFormat); Console.WriteLine(longFormat); Console.WriteLine(customDate); |
短い日付形式: 2025/02/25
長い日付形式: 2025年2月25日(火)
カスタム形式: 2025/12/31
文字列の整列(Alignment)
プレースホルダーに指定する数値が正の場合は右寄せ、負の場合は左寄せとなります。
列を揃えたい場合やテーブル表示のレイアウトを整えたい場合に有効です。
1 2 3 4 5 6 7 8 9 10 |
// 整列(Alignment)の例 string header = string.Format("{0,-10} {1,10}", "Fruit", "Count"); // 左寄せ, 右寄せ string row1 = string.Format("{0,-10} {1,10}", "Apple", 5); string row2 = string.Format("{0,-10} {1,10}", "Banana", 12); string row3 = string.Format("{0,-10} {1,10}", "Cherry", 7); Console.WriteLine(header); Console.WriteLine(row1); Console.WriteLine(row2); Console.WriteLine(row3); |
Fruit Count
Apple 5
Banana 12
Cherry 7
注意点
インデックスの整合性に注意する必要があります。
プレースホルダーに指定したインデックスと引数の順番や個数が合わない場合、FormatExceptionが発生する可能性があります。
また、整列の幅やカルチャ依存の書式 (通貨や日付) にも気を配ることで、想定と異なる表示にならないように対策できます。
大量の文字列連結が必要な場面では、StringBuilderなど他の手段を検討することもあります。
まとめ
string.Formatは、プレースホルダーと書式指定子を活用することで、柔軟な文字列処理を可能にします。
数値や日付のフォーマットから、整列を利用したレイアウト調整まで、多様な使い方をサポートします。
注意点を踏まえながら、最適な形で利用してみてください。