ちょっとしたフォーマッティング

ちょっとしたフォーマッティング

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も、たくさんのフォーマットを持っているので、
すべてを覚えてもよいかもしれないが、やりたいことから覚えてもよいと思う。

同じタグの記事
同じカテゴリの記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA