![]() | tech note |
| 自分をリファクタリング中。 |
printfできるようになってるのね。
C言語のprintfのような書式付き出力がJavaでも導入されているようですね。
以前関わったJavaプロジェクトでは、printf相当のことを行うフォーマッタクラスを自前で用意した記憶があります。
「3」を「03」と出したいといった場面は多いですから、これが標準で使えるのは便利ですね。
printfメソッドが実装されているjava.util.FormatterのJavaDocには、
Java 言語の書式付き出力は、C の printf の影響を大きく受けています。書式文字列は C に似ていますが、Java 言語に対応し、その機能を活用するために、一部がカスタマイズされています。また、Java の書式は、C よりも厳密です。 たとえば、変換がフラグと互換性がない場合、例外がスローされます。C では、適用不可能なフラグは、無視されるだけです。このため、書式文字列は、C プログラマになじみのあるものになっていますが、C との完全な互換性を保っているわけではありません。
int y = 2007, m = 5, d = 7;
System.out.printf("%04d%02d%02d", y, m, d);
-> 20070507
System.out.printf("%2$02d/%3$02d/%1$04d", y, m, d);
-> 05/07/2007
System.out.printf("%tp%<tI:%<tM:%<tS\n", new Date());
-> 午後07:10:26
System.out.printf(Locale.ENGLISH,
"%tp%<tI:%<tM:%<tS\n", new Date());
-> pm07:10:26
System.out.println(String.format("%02d", m));
-> 05
CustomFormatter cf = new CustomFormatter(xxx);
System.out.printf("%s", cf);
-> formatTo()の結果