Java の printf メソッドはフォーマット出力に使用されます。

フォーマットは出力の形式を指定し、数値の精度、文字幅、日付形式などを含みます。以下は一般的に使用されるフォーマット記号と使い方です:

文字列フォーマット

  • %s : 文字列を出力

例

System.out.printf("%s", "hello world"); // "hello world" を出力

整数フォーマット

  • %d : 10進整数を出力
  • %o : 8進整数を出力
  • %x : 16進整数を出力
  • %X : 大文字の16進整数を出力

例

System.out.printf("%d %o %x %X", 10, 10, 10, 10); // "10 12 a A" を出力

浮動小数点数フォーマット

  • %f : 浮動小数点数を出力
  • %e : 科学表記法で表された浮動小数点数を出力(小文字のe)
  • %E : 科学表記法で表された浮動小数点数を出力(大文字のE)
  • %.nf : 小数点以下の桁数を制御します。nは数値です。

例

System.out.printf("%.2f %e %E", 3.1415926, 3.1415926, 3.1415926); // "3.14 3.141593e+00 3.141593E+00" を出力

ブール値フォーマット

  • %b : ブール値を出力

例

System.out.printf("%b", true); // "true" を出力

文字フォーマット

  • %c : 文字を出力

例

System.out.printf("%c", 'a'); // "a" を出力

幅と精度のフォーマット

  • %n$ : 第n引数を指定
  • %m.n : 幅と精度を制御します。mは最小幅、nは小数点以下の桁数を示します。

例

System.out.printf("%2d %5.2f %s", 10, 3.1415926, "hello"); // "10 3.14 hello" を出力

以下は、Java の printf メソッドで使用可能な完全なフォーマット記号のリストです:

  • %d:符号付き10進整数
  • %o:符号なし8進整数
  • %x、%X:符号なし16進整数。それぞれ小文字と大文字で表します。
  • %f、%F:小数点付きの10進浮動小数点数。それぞれ小文字と大文字で表します。
  • %e、%E:指数付き浮動小数点数。それぞれ小文字と大文字で表します。
  • %g、%G:数値の大きさに応じて%fまたは%e形式を自動選択します。それぞれ小文字と大文字で表します。
  • %a、%A:16進浮動小数点数。それぞれ小文字と大文字で表します。
  • %c:文字型。単一の文字を出力します。
  • %s:文字列型。文字列を出力します。
  • %n:改行文字
  • %%:パーセント記号%を1つ出力
  • %h、%H:ハッシュコード。それぞれ16進数と16進数の大文字で表します。
  • %t、%T:日時フォーマット。特定の変換文字を使用して表します。例えば、%tYは年を表し、%tBは月の完全な名前を表します。
  • %b、%B:ブール値型。trueまたはfalseを出力します。それぞれ小文字と大文字で表します。
  • %S:大文字の文字列を出力

以下は、Java の printf メソッドで日付をフォーマットするために使用できる記号のリストです:

  • %tB:ローカライズされた月の完全な名前
  • %tb:ローカライズされた月の省略名
  • %tA:ローカライズされた曜日の完全な名前
  • %ta:ローカライズされた曜日の省略名
  • %tY:4桁の年
  • %ty:2桁の年
  • %tm:2桁の月
  • %td:2桁の日
  • %te:1桁または2桁の日
  • %tH:24時間制の時
  • %tI:12時間制の時
  • %tM:分
  • %tS:秒
  • %tp:午前または午後
  • %tZ:タイムゾーン

例

import java.util.Date; /** * printfを使用して出力*/ /** 重要な技術ポイント * java.io.PrintStreamのprintfメソッドを使用してCスタイルの出力を実現 * printfメソッドの最初の引数は出力フォーマットで、2番目の引数は可変長であり、出力するデータオブジェクトを表します*/ public class Printf { public static void main(String[] args) { /*** 文字列の出力 ***/ //%sは文字列の出力を表します。つまり、後続の文字列でパターン中の%sを置き換えます。 System.out.printf("%s", new Integer(1212)); //%nは改行を表します。 System.out.printf("%s%n", "end line"); //複数の引数もサポートできます。 System.out.printf("%s = %s%n", "Name", "Zhangsan"); //%Sは文字列を大文字で出力します。 System.out.printf("%S = %s%n", "Name", "Zhangsan"); //複数の引数をサポートする場合、%sの間に変数番号を挿入できます。1$は最初の文字列、3$は3番目の文字列を表します。 System.out.printf("%1$s = %3$s %2$s%n", "Name", "san", "Zhang"); /*** boolean型の出力 ***/ System.out.printf("true = %b; false = ", true); System.out.printf("%b%n", false); /*** 整数型の出力 ***/ Integer iObj = 342; //%dは整数を10進整数としてフォーマットすることを表します。 System.out.printf("%d; %d; %d%n", -500, 2343L, iObj); //%oは整数を8進整数としてフォーマットすることを表します。 System.out.printf("%o; %o; %o%n", -500, 2343L, iObj); //%xは整数を16進整数としてフォーマットすることを表します。 System.out.printf("%x; %x; %x%n", -500, 2343L, iObj); //%Xは整数を16進整数としてフォーマットし、かつ文字を大文字にします。 System.out.printf("%X; %X; %X%n", -500, 2343L, iObj); /*** 浮動小数点型の出力 ***/ Double dObj = 45.6d; //%eは科学表記法で浮動小数点数を出力することを表します。 System.out.printf("%e; %e; %e%n", -756.403f, 7464.232641d, dObj); //%Eは科学表記法で浮動小数点数を出力し、かつ大文字形式です。 System.out.printf("%E; %E; %E%n", -756.403f, 7464.232641d, dObj); //%fは10進数で浮動小数点数をフォーマット出力することを表します。 System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj); //小数点以下の桁数を制限することもできます。 System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj); /*** 日付型の出力 ***/ //%tは日時型のフォーマットを表します。%Tは日時の大文字形式です。%tの後に特定の文字を使用して異なる出力形式を表します。 Date date = new Date(); long dataL = date.getTime(); //年、月、日のフォーマット //%tの後にyを使用すると、日付の年(2桁の年、例:99)を出力します。 //%tの後にmを使用すると日付の月を出力し、%tの後にdを使用すると日付の日を出力します。 System.out.printf("%1$ty-%1$tm-%1$td; %2$ty-%2$tm-%2$td%n", date, dataL); //%tの後にYを使用すると日付の年(4桁の年)を出力します。 //%tの後にBを使用すると日付の月の完全な名前を出力し、%tの後にbを使用すると日付の月の省略名を出力します。 System.out.printf("%1$tY-%1$tB-%1$td; %2$tY-%2$tb-%2$td%n", date, dataL); //以下は一般的な日付の組み合わせです。 //%tの後にDを使用すると、"%tm/%td/%ty"で日付をフォーマットします。 System.out.printf("%1$tD%n", date); //%tの後にFを使用すると、"%tY-%tm-%td"で日付をフォーマットします。 System.out.printf("%1$tF%n", date); /*** 時間型の出力 ***/ //時、分、秒を出力 //%tの後にHを使用すると時間の時(24時間制)を出力し、%tの後にIを使用すると時間の時(12時間制)を出力します。 //%tの後にMを使用すると時間の分を出力し、%tの後にSを使用すると時間の秒を出力します。 System.out.printf("%1$tH:%1$tM:%1$tS; %2$tI:%2$tM:%2$tS%n", date, dataL); //%tの後にLを使用すると時間の秒のミリ秒を出力します。 System.out.printf("%1$tH:%1$tM:%1$tS %1$tL%n", date); //%tの後にpを使用すると、時間の午前または午後の情報を出力します。 System.out.printf("%1$tH:%1$tM:%1$tS %1$tL %1$tp%n", date); //以下は一般的な時間の組み合わせです。 //%tの後にRを使用すると、"%tH:%tM"で時間をフォーマットします。 System.out.printf("%1$tR%n", date); //%tの後にTを使用すると、"%tH:%tM:%tS"で時間をフォーマットします。 System.out.printf("%1$tT%n", date); //%tの後にrを使用すると、"%tI:%tM:%tS %Tp"で時間をフォーマットします。 System.out.printf("%1$tr%n", date); /*** 曜日の出力 ***/ //%tの後にAを使用すると、曜日の完全な名前を取得します。 System.out.printf("%1$tF %1$tA%n", date); //%tの後にaを使用すると、曜日の省略名を取得します。 System.out.printf("%1$tF %1$ta%n", date); //日時の完全な情報を出力 System.out.printf("%1$tc%n", date); } } /** *printfメソッドでは、形式"%s"は2番目の可変長引数の最初の引数値を文字列として出力することを表します。 *形式"%n"は改行を表します。形式"%S"は文字列を大文字で出力することを表します。"%s"の間に"n$"を使用すると *可変長引数のn番目の引数値を出力します。形式"%b"は2番目の可変長引数の最初の引数値をブール値として出力することを表します。*/ /** * 形式"%d"は10進整数形式で出力することを表します。"%o"は8進形式で出力することを表します。"%x"は16進で * 出力することを表します。"%X"は16進で出力し、かつ文字(A、B、C、D、E、F)を大文字に変換します。形式"%e"は * 科学表記法で浮動小数点数を出力することを表します。形式"%E"は科学表記法で浮動小数点数を出力し、かつeを大文字にします。形式 * "%f"は10進浮動小数点数で出力することを表します。"%f"の間に".n"を追加すると、出力時に小数点以下n桁を保持することを表します。*/ /** * 形式"%t"は日時型の出力を表します。"%t"の後にyを使用すると日付の2桁の年(例:99)を出力し、mを使用すると * 日付の月を出力し、dを使用すると日付の日を出力します。"%t"の後にYを使用すると日付の4桁の年 * (例:1999)を出力し、Bを使用すると日付の月の完全な名前を出力し、bを使用すると日付の月の省略名を出力します。"%t"の後にD * を使用すると"%tm/%td/%ty"の形式で日付を出力し、Fを使用すると"%tY-%tm-%td"の形式で日付を出力します。*/ /** * "%t"の後にHを使用すると出力時間の時(24時間制)を表し、Iを使用すると出力時間の時(12時間制)を表し、Mを使用すると出力時間の分を表し、Sを使用すると出力時間の秒を表し、Lを使用すると出力時間の秒のミリ秒数を表し、pを使用すると出力時間が午前か午後かを表す。"%t"の後にRを使用すると"%tH:%tM"の形式で時間を出力し、Tを使用すると"%tH:%tM:%tS"の形式で時間を出力し、rを使用すると"%tI:%tM:%tS %Tp"の形式で時間を出力する。*/ /** * "%t"の後にAを使用すると日付の曜日の正式名称を出力し、aを使用すると日付の曜日の略称を出力する。*/