Javaで「String.format」メソッドを使用して、数値をゼロパディング(ゼロ埋め)したり、文字列へ半角スペース埋めする方法をご紹介します。
formatメソッドの書式
-
引数 型 説明 第1引数 String format 書式文字列 第2引数 Object... args 書式文字列の書式指示子により参照される引数。書式指示子よりも引数が多い場合、余分な引数は無視される。引数の数は変動し、ゼロの場合もある。引数の最大数は、Java 仮想マシン仕様で定義されている Java 配列の最大次元により制限される。引数が null の場合、動作は変換に応じて異なる
発生する例外
- IllegalFormatException – 書式文字列が、不正な構文、所定の引数と互換性がない書式指示子、書式文字列に与えられた不適切な引数、あるいはほかの不正な条件を含む場合。
- NullPointerException – format が null の場合
用途別の記述例
| 用途 | 記述例 | 備考 | ||
|---|---|---|---|---|
| 文字列の先頭を空白埋めする | String.format(\%6s\" | \"abc\")" | 指定文字列を最大6桁まで文字列の左側に空文字を追加します。 | |
| 文字列の後ろへ空白埋めする | String.format(\%-6s\" | \"abc\")" | 指定文字列を最大6桁まで文字列の右側に空文字を追加します。 | |
| 数字の先頭を0埋めする | String.format(\%06d\" | 123)" | 指定数字を最大6桁まで文字列の左側にゼロパディングします。 | |
| 数字を3桁ごとにカンマ区切りする | String.format(\% | d\" | 123456789)" | 指定数字を3桁毎にカンマ区切りします。 |
サンプルJavaソース
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@Test public void formatTest() { // 期待値 String expected1 = " abc"; String expected2 = "abc "; String expected3 = "000123"; String expected4 = "123,456,789"; // 実行 String result1 = String.format("%6s", "abc"); String result2 = String.format("%-6s", "abc"); String result3 = String.format("%06d", 123); String result4 = String.format("%,d", 123456789); // 検証 assertEquals("文字列が一致していません。", expected1, result1); assertEquals("文字列が一致していません。", expected2, result2); assertEquals("文字列が一致していません。", expected3, result3); assertEquals("文字列が一致していません。", expected4, result4); } |
String型項目に対してゼロパディングしたい場合、一旦formatで指定桁数に整えてからreplaceメソッドを使用する事でゼロパディング可能となります。
JUnitサンプル
|
1 2 3 4 5 6 7 8 9 10 11 |
@Test public void formatTest2() { // 期待値 String expected = "000123"; // 実行 String result = String.format("%6s", "123").replace(" ", "0"); // 検証 assertEquals("文字列が一致していません。", expected, result); } |
String.formatのJavaDoc
補足:より柔軟/実用的なゼロ埋め・桁揃えテクニック
1. DecimalFormat を使う方法
数値(特に小数や通貨など)をフォーマットしたい場合、java.text.DecimalFormat も便利です。
2. String.format の拡張オプション(幅・符号・精度など)
記事で扱った %6s / %-6s / %06d / %,d 以外にも応用できます。
3. IDや番号(“数値風”の文字列)の桁揃え
数値ではなく文字列として桁を揃えたいケース。
Apache Commons Lang を使う方法:
4. 全角(日本語)を含むときの見た目ズレ
String.format の幅指定は文字数ベースです。全角・半角で見た目幅が異なるため、表示上の整列が目的なら全角幅を考慮した独自パディングが必要です。
5. 例外・エラー時の注意
-
書式指定子と引数型が不一致だと
IllegalFormatExceptionが発生。 -
指定幅より大きい値を渡しても切り捨てはされずそのまま表示。
6. まとめ
-
単純なゼロ埋め/桁揃えは
String.formatが基本。 -
小数・通貨・カンマ区切りは
DecimalFormatの併用が便利。 -
ID 等の文字列は
replaceやStringUtils.leftPadを活用。 -
全角混在の見た目整列は追加工夫が必要。
-
フォーマット処理は例外も考慮して堅牢に。
