ちょっとしたフォーマッティング
javaでログ出力をしていると、少しだけフォーマットしたいときがある。
テンプレートエンジンを利用する必要はない。
1行でパパっとフォーマッティングしたい。
例えば、処理件数を出力するとき、下記のように標準出力に処理中の件数をそのまま出力する。
long counter = 0;
for (Dto dto : dtoList) {
logic(dto);
counter++;
if (counter % 1000 == 0) {
System.out.println("処理中。" + counter);
}
}
System.out.println("処理完了。" + counter);
処理中。1000
処理中。2000
処理中。3000
処理中。4000
処理中。5000
処理中。6000
処理中。7000
処理中。8000
処理中。9000
処理中。10000
処理中。11000
処理中。12000
処理完了。12345
たしかに、処理件数は出力される。
ここで、java.text.MessageFormatを利用すると、件数を3桁カンマ付きで出力できる。
import java.text.MessageFormat;
long counter = 0;
for (Dto dto : dtoList) {
logic(dto);
counter++;
if (counter % 1000 == 0) {
System.out.println(MessageFormat.format("処理中。{0}", counter));
}
}
System.out.println(MessageFormat.format("処理完了。{0}", counter));
処理中。1,000
処理中。2,000
処理中。3,000
処理中。4,000
処理中。5,000
処理中。6,000
処理中。7,000
処理中。8,000
処理中。9,000
処理中。10,000
処理中。11,000
処理中。12,000
処理完了。12,345
String.formatを利用すると、出力桁を簡単に固定できるため、この方法も見通しが良い。
long counter = 0;
for (Dto dto : dtoList) {
logic(dto);
counter++;
if (counter % 1000 == 0) {
System.out.println(String.format("%7d 処理中。", counter));
}
}
System.out.println(String.format("%7d 処理完了。", counter));
1000 処理中。
2000 処理中。
3000 処理中。
4000 処理中。
5000 処理中。
6000 処理中。
7000 処理中。
8000 処理中。
9000 処理中。
10000 処理中。
11000 処理中。
12000 処理中。
12345 処理完了。
数字の桁数が合ったので、数字を前にした。
String.formatもMessageFormat.formatも、たくさんのフォーマットを持っているので、
すべてを覚えてもよいかもしれないが、やりたいことから覚えてもよいと思う。
- EclipseLinkでJPA
- eclipseの良く使うショートカットキー
- eclipseデフォルトの文字コード
- itext5でPDFを暗号化する
- Java DateFormat
- Java8で指定回数繰り返し
- Java9でJAXB
- JavaでZip圧縮
- javaでイメージフォーマット変換
- javaでダミー画像作成
コメントを残す