きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Javaで特定の文字数まで0埋めや任意の文字で埋めたい(padLeft, padRightのような動き)

小ネタ。

環境

  • Java
    • 17

対応

java.lang.Stringを使用します。内部的にはjava.util.Formatterを使用しています。

intの場合は%0{特定の文字数}d。Stringの場合は%{特定の文字数}sで半角スペースで左埋めしたあと、replace(半角スペース, 任意の文字)で半角スペースを任意の文字に書き換えます。

// 次の書き方は全て、1を0左埋めして001に書き換わります

// intを渡す場合
String.format("%03d", 1);

// Java15以降でできる書き方
"%03d".formatted(1);

// Stringを渡す場合(intでも問題ありません)
"%3s".formatted("1").replace(" ", "0")

任意の文字で右埋めしたい場合は、%{-特定の文字数}sを使用します。

// 任意の文字で1をXで右埋めして 1XXに書き換わります
"%-3s".formatted("1").replace(" ", "X")

Stringの場合、無駄なreplaceがあるように見えますが、これ以上に最適な方法が見つかりませんでした。また、半角スペースがある場合にはうまく書き換えられません。

ソースコード

終わりに

数字のIDを元に処理を進めていたのですが、S3のバケット名をIDにしようとしたときに3文字以上でなければならない制約があったのでこの方法を使用しました。