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

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

javaでログ出力をしていると、少しだけフォーマットしたいときがある。
テンプレートエンジンを利用する必要はない。
1行でパパっとフォーマッティングしたい。

例えば、処理件数を出力するとき、下記のように標準出力に処理中の件数をそのまま出力する。

1
2
3
4
5
6
7
8
9
long counter = 0;
for (Dto dto : dtoList) {
    logic(dto);
    counter++;
    if (counter % 1000 == 0) {
        System.out.println("処理中。" + counter);
    }
}
System.out.println("処理完了。" + counter);
1
2
3
4
5
6
7
8
9
10
11
12
13
処理中。1000
処理中。2000
処理中。3000
処理中。4000
処理中。5000
処理中。6000
処理中。7000
処理中。8000
処理中。9000
処理中。10000
処理中。11000
処理中。12000
処理完了。12345

たしかに、処理件数は出力される。
ここで、java.text.MessageFormatを利用すると、件数を3桁カンマ付きで出力できる。

1
2
3
4
5
6
7
8
9
10
11
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
2
3
4
5
6
7
8
9
10
11
12
13
処理中。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を利用すると、出力桁を簡単に固定できるため、この方法も見通しが良い。

1
2
3
4
5
6
7
8
9
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));
1
2
3
4
5
6
7
8
9
10
11
12
13
   1000 処理中。
   2000 処理中。
   3000 処理中。
   4000 処理中。
   5000 処理中。
   6000 処理中。
   7000 処理中。
   8000 処理中。
   9000 処理中。
  10000 処理中。
  11000 処理中。
  12000 処理中。
  12345 処理完了。

数字の桁数が合ったので、数字を前にした。

String.formatもMessageFormat.formatも、たくさんのフォーマットを持っているので、
すべてを覚えてもよいかもしれないが、やりたいことから覚えてもよいと思う。

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

コメントを残す

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

CAPTCHA