Javaでファイルや標準出力に文字列を出力する時に,0パディングしたり小数点以下の桁数を揃えたりといった書式整形をする方法を解説します.具体的にはString.format()メソッド,System.out.printf()メソッドの使い方を解説します.
目次
Javaで書式整形を行うString.format()
Javaで文字列を出力した際に、以下のように表示が崩れていると美しくないですね。
Name Gender Savings
Hatakeyama Male 1400000
Yamada Female 300000
Saito Male 25500000
各行の名前や性別などは文字の長さが違うため、表示の桁が揃っていません。本当は以下のように整形して出力することが理想ですよね。
Name Gender Savings
Hatakeyama Male 1,400,000
Yamada Female 300,000
Saito Male 25,500,000
Stringクラスには、文字列を整形して表示するためにformat()メソッドが用意されています。書式整形では以下のような整形を行うことが可能です。
format()メソッドを使った例を見てみます。以下は「XX日目に死ぬXX」という雛形」を準備し、それぞれの「XX」の部分に数字や文字列を入れて文字列を組み立てる例です。
String.format("%d日目に死ぬ%s", 100, "ワニ");
出力内容は以下の通りになります。
100日目に死ぬワニ
format()メソッドの第1引数に指定するのは文字列の雛形を指定する書式指定文字列と呼ばれるものです。%記号の部分はプレースホルダ (place holder)と呼ばれ、第2引数以降で指定した値が挿入されます。
プレースホルダーの文法
プレースホルダーは以下の文法で記述します。
% 修飾(省略可能) 桁(省略可能) 型(必須)
各プレースホルダーの書式は以下の通りです。
- 修飾
- , 3桁ごとにカンマ
- 0 ゼロパディング
- – 左寄せ
- + 符号を強制表示
- 桁
- 表示桁数を指定。
- n,m形式で指定した場合、全体n桁、小数点以下m桁での表示
- 型
- d 整数
- s 文字列
- f 小数
- b 真偽値
String.format()の利用例
冒頭のような整形された一覧を出力するコードを書いてみます。
package sample;
import java.util.ArrayList;
import java.util.List;
public class StringPractice2 {
public static void main(String[] args) {
final String FORMAT_HEADER = "%-10s %-6s %10s";
final String FORMAT_BODY = "%-10s %-6s %,10d";
Character c1 = new Character("Hatakeyama", "Male", 1400000);
Character c2 = new Character("Yamada", "Female", 300000);
Character c3 = new Character("Saito", "Male", 25500000);
List<Character> list = new ArrayList<>();
list.add(c1);
list.add(c2);
list.add(c3);
System.out.printf(FORMAT_HEADER, "Name", "Gender", "Savings");
System.out.println();
for (Character character : list) {
String s = String.format(FORMAT_BODY, character.name, character.gender, character.savings);
System.out.println(s);
}
}
}
class Character {
String name;
String gender;
int savings;
public Character(String name, String gender, int savings) {
this.name = name;
this.gender = gender;
this.savings = savings;
}
}
System.out.printf()で書式整形した文字列を標準出力に出力
書式整形と同時に出力を行いたい場合は、System.out.printf()メソッドを使うと便利です。引数の指定方法は、String.format()メソッドと同じです。