misc.log

日常茶飯事とお仕事と

C#での文字列書式設定方法

いつも忘れます。そして、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));