
C#のString.Formatメソッドで文字列の変換と挿入をする方法
C#のString.Formatメソッドでは、「異なるデータ型から文字列への変換(書式指定可)」や「変換した文字列同士の連結」といった処理が実現可能です。
例えば、顧客コードを3桁で管理していて「1」を「001」に変換したいケースにも活用できます。
この記事では、String.Formatの使用方法について解説していきます。大変便利なメソッドなので、ぜひ参考にしてみてください。
- PG
- 桁数不足の時に数値を0埋めしたいのですが、if文で桁数を判定して先頭に0を追加する方が良いでしょうか?
- PL
- 数値の0埋めをしたい時は、StringクラスのFormatメソッドを使用すると便利ですよ。
目次
String.Formatメソッドの概要
Formatメソッドには複数の定義が存在しますが、主なパターンを例に挙げて紹介します。
1 |
String String.Format(String 書式, Object オブジェクト0, オブジェクト1, …) |
文字列の書式項目を、指定されたオブジェクトの文字列形式に置換します。
オブジェクトは複数与えることもできるため、オブジェクトのインデックス番号(0始まり)で判別します。文字列形式は、書式にて「{インデックス番号:書式指定子}」の形式で指定することが可能です。
書式指定子を用いて数値を0埋めする方法
まず、標準でサポートされている主な数値の書式指定子は、下記のとおりです。
書式指定子 | 概要 | 使用例 |
---|---|---|
C | 通貨 | 1000 |
D、d | Decimal (10 進数型) | 999 |
E、e | 指数 | 1052.033 |
F、f | 固定小数点 | 99.99 |
P、p | パーセント | 1 |
X、x | 16進数 | FF |
まずは、数値の1をそのまま出力してみましょう。
1 2 3 4 |
int num = 1; String s = String.Format("num={0:D}", num); Console.WriteLine(s); // → 出力結果は「num=1」となります。 |
では次に、0埋めの3桁で出力したい場合、書式指定子の後ろに桁数を指定します。
1 2 3 4 |
int num = 1; String s = String.Format("num={0:D3}", num); Console.WriteLine(s); // → 出力結果は「num=001」となります。 |
もしくは、書式設定子の代わりに0を並べても可能です。
1 2 3 4 |
int num = 1; String s = String.Format("num={0:000}", num); Console.WriteLine(s); // → 出力結果は「num=001」となります。 |
複数の書式項目を指定する方法
次は、複数の書式項目を指定してみましょう。
例えば、単価と数量の数値を用いて、乗算した計算結果を出力します。
1 2 3 4 5 |
int tanka = 200; int suryo = 5; String kekka = String.Format("{0:C}×{1}={2:C}", tanka, suryo, tanka*suryo); Console.WriteLine(kekka); // → 出力結果は「\200×5=\1,000」となります。 |
{0}にはtanka、{1}にはsuryo、{2}にはtanka*suryo が挿入されます。
また、書式指定子の「C」によって通貨形式を指定していますね。
同じ書式項目を複数回指定する例も紹介します。同じ数値を10進数と16進数で出力します。
1 2 3 4 |
int num = 255; string kekka = string.Format("{0:D}を16進数で表すと{0:X}", num); Console.WriteLine(kekka); // → 出力結果は「255を16進数で表すとFF」となります。 |
{0}は同じですが、書式指定によってD(10進数)とX(16進数)を指定していますね。
結果の文字列に中括弧を含める方法
書式項目は{0}のように中括弧で囲んで指定していますが、中括弧自体を文字列に含めたい場合は、どうすれば良いのでしょうか。
1 2 3 4 |
int index = 1; string kekka = string.Format("中括弧にインデックス番号を指定(例:{{{0}}})", index); Console.WriteLine(kekka); // → 出力結果は「中括弧にインデックス番号を指定(例:{1})」となります。 |
中括弧を二重にすることで文字列の中括弧としてみなされて、内部の{0}は今までの要領で置換されていますね。
もしコードが見にくいと感じる方は、複数指定を活用して実現することも可能です。
1 2 3 4 |
int index = 1; string kekka = string.Format("中括弧にインデックス番号を指定(例:{0}{1}{2})", "{", index, "}"); Console.WriteLine(kekka); // → 出力結果は「中括弧にインデックス番号を指定(例:{1})」となります。 |
- PG
- なるほど、こんな便利なメソッドがあったのですね!
- PL
- そうですね。この機会に、String.Formatを使用して様々な文字列を作成してみてください。
String.Formatメソッドで数値を文字列に変換
今回はString.Formatを使用した文字列の変換を紹介しました。プログラムを組む上で、変数の値を文字列に変換したい場面は多々発生すると思います。すでに用意されているクラスやメソッドを活用して、効率良くコーディングを進めていきたいですね。