いつも忘れます。そして、Microsoftのサイトにわかりやすい説明がない。というわけでMSのサイトへのリンク等も含めて自分用に少しまとめておきます。
String.Formatメソッドの書式指定とプレースホルダー
よく使われるのは
String.Format("{0}さんの答えは{1}です。", name, answer);
のようなケースで、0や1の番号が振られたプレースホルダーに対して、後ろの変数が順に対応付けられます。対応付けが4つ以上の場合はObject型の配列として引数指定もできるようですね。プレースホルダー自体は文字列の中に埋め込んで使うので、後述の配置や書式設定も含めて文字列としてFormtメソッドに引き渡す必要がある点、注意してください。
String.Formatプレースホルダー内での書式指定概要
詳細は以下のページに記載されていますが、前述のプレースホルダーの中で、文字の配置や形式に関する指定が可能で、この書式指定のことを「複合書式指定(composite formatting)」というようです。
- .NETにおける基本型の操作/複合書式指定
- https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/composite-formatting
プレースホルダーの通し番号(index)の後ろに
- カンマに続いて配置(alignment)情報を記載
- その後ろにコロンに続けて書式設定(format string)
を記載できるようになっています。配置情報を飛ばしていきなり「{0:D}」のように書式設定だけにすることも可能なようです。
String.Format/配置(Alignment)指定
配置の指定はプレースホルダーのindexに続き、カンマで区切ってプラスかマイナスの整数で行います。
- プラスの値 …… 右寄せ。数値で指定した分のスペースを確保桁数が指定した数値よりも小さい場合は、開いた部分を空白で埋めます。
- マイナスの値 … 左寄せ。
String.Format/書式設定(format string)
書式設定はプレースホルダーindexや配置指定の後ろに、コロンで区切って指定します。書式指定はFormatメソッドに引き渡す情報のデータ型によって使い方が異なるようで、それぞれ下記のURLで説明されています。
年月日の場合は、Formatの第1引数にGlobalization.CultureInfoを「"ja-JP"」で生成し、同インスタンスのDateTimeFormat.CalendarにGlobalization.JapaneseCalendar()を入れたものを指定すると、書式文字「g」で和暦の名称(平成、とか)、「y」で和暦年数が表示されます。
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("ja-JP", false); culture.DateTimeFormat.Calendar = new System.Globalization.JapaneseCalendar(); Console.WriteLine(string.Format(culture,"{0:gy}年", DateTime.Now));