Java:ゼロ埋め、半角スペース埋めする方法

Javaで「String.format」メソッドを使用して、数値をゼロパディング(ゼロ埋め)したり、文字列へ半角スペース埋めする方法をご紹介します。

目次

formatメソッドの書式

    • 引数  型       説明
      第1引数String format書式文字列
      第2引数Object... args書式文字列の書式指示子により参照される引数。書式指示子よりも引数が多い場合、余分な引数は無視される。引数の数は変動し、ゼロの場合もある。引数の最大数は、Java 仮想マシン仕様で定義されている Java 配列の最大次元により制限される。引数が null の場合、動作は変換に応じて異なる

発生する例外

  • IllegalFormatException – 書式文字列が、不正な構文、所定の引数と互換性がない書式指示子、書式文字列に与えられた不適切な引数、あるいはほかの不正な条件を含む場合。
  • NullPointerException – format が null の場合

用途別の記述例

    用途正しい記述例 (Java)説明
    文字列の先頭を空白埋めする(右寄せ)String.format("%6s", "abc")全体幅 6 で右寄せ → 左側に空白が入る
    文字列の後ろへ空白埋めする(左寄せ)String.format("%-6s", "abc")全体幅 6 で左寄せ → 右側に空白が入る
    数字を 0 埋めするString.format("%06d", 123)全体幅 6・0パディング → 000123
    数字を 3桁ごとにカンマ区切りString.format("%,d", 123456789)123,456,789 の書式にする

サンプルJavaソース

String型項目に対してゼロパディングしたい場合、一旦formatで指定桁数に整えてからreplaceメソッドを使用する事でゼロパディング可能となります。

JUnitサンプル

String.formatのJavaDoc

補足:より柔軟/実用的なゼロ埋め・桁揃えテクニック

1. DecimalFormat を使う方法

数値(特に小数や通貨など)をフォーマットしたい場合、java.text.DecimalFormat も便利です。

import java.text.DecimalFormat;

DecimalFormat df = new DecimalFormat("000000");  // 6桁、ゼロ埋め
String s = df.format(123);                       // → "000123"

DecimalFormat df2 = new DecimalFormat("#,###.00");
String s2 = df2.format(1234.5);                  // → "1,234.50"

2. String.format の拡張オプション(幅・符号・精度など)

記事で扱った %6s / %-6s / %06d / %,d 以外にも応用できます。

// プラス符号を強制表示
String a = String.format("%+06d", 123);  // → "+00123"

// 浮動小数点の精度・幅
double d = 3.14159;
String b = String.format("%.2f", d);     // → "3.14"
String c = String.format("%8.2f", d);    // 幅8、小数2 → "    3.14"

3. IDや番号(“数値風”の文字列)の桁揃え

数値ではなく文字列として桁を揃えたいケース。

String id = "123";
// 空白右寄せ → ' ' を '0' に置換
String padded = String.format("%1$" + 6 + "s", id).replace(' ', '0');  // → "000123"

Apache Commons Lang を使う方法:

import org.apache.commons.lang3.StringUtils;

String padded = StringUtils.leftPad(id, 6, '0');  // → "000123"

4. 全角(日本語)を含むときの見た目ズレ

String.format の幅指定は文字数ベースです。全角・半角で見た目幅が異なるため、表示上の整列が目的なら全角幅を考慮した独自パディングが必要です。

5. 例外・エラー時の注意

  • 書式指定子と引数型が不一致だと IllegalFormatException が発生。

  • 指定幅より大きい値を渡しても切り捨てはされずそのまま表示。

6. まとめ

  • 単純なゼロ埋め/桁揃えは String.format が基本。

  • 小数・通貨・カンマ区切りは DecimalFormat の併用が便利。

  • ID 等の文字列replaceStringUtils.leftPad を活用。

  • 全角混在の見た目整列は追加工夫が必要。

  • フォーマット処理は例外も考慮して堅牢に。

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
目次
0
あなたの考えが大好きです、コメントしてください。x