Java

Javaで数字の頭を0埋めする方法

dual-screen

数字を扱う際に桁数を揃えたくなること、ありませんか?
例えば、「101」というIDが入力された場合に、「00101」として保存するような場合ですね。
そんな時はStringクラスのformatメソッドを使えばOKです。

String.format()の基本的な使い方

String.format()クラスの基本的な型は以下の通りです。

String.format(“元となる文字列”, “値”);

例として、「今年は○○年ですね」という文字列を生成してみましょう。
この時に受け取る「値」は「2019」とします。

その場合は以下のようになります。

String formatStr = String.format(“今年は%d年ですね”, 2019); 
System.out.println(formatStr);
// 出力結果
今年は2019年ですね

元となる文字列の中に「%d」とありますが、これは「ここにdecimal型の値が入りますよ」という印です。
decimal型の頭文字をとって「d」としているわけですね。

察しの良い方はお気づきかもしれませんが、これは他の型でも同じです。
boolean型:%b
float型:%f
String型:%s
char型:%c
というようになります。

また、日時のフォーマットにも対応しており、その際は少し形が変わります。
先ほどまでは「%{オプション}」という形でしたが、日付の場合は「%t{オプション}」というように、「t」が必須となるのです。

オプションに指定するパラメータは数が多いので、ここでは1つだけ例を挙げようと思います。

String formatStr = String.format("%tT", Calendar.getInstance());
System.out.println(formatStr);
// 出力結果
21:34:00

他のパラメータも知りたい方は、Oracleのページが詳しいので、そちらをご確認ください。

String.format()で0埋めする

それでは今回の本題です。
数字の頭の部分を0埋めする場合は、以下のように書きます。

String formatStr = String.format("0埋めすると%05dです。", 123);
System.out.println(formatStr);
// 出力結果
0埋めすると00123です。

今度は%とdの間に文「05」が増えています。
これは、「5桁の数字で、足りない部分は0埋めします。」という意味です。
ですので、「%09d」というようにすると「000000123」となります。

ちなみに、0を除いて「%5d」とすると、「5桁の数字で、足りない部分は空白で埋めます。」という意味になります。
どういうことか見てみましょう。

String formatStr = String.format("0埋めすると%5dです。", 123);
System.out.println(formatStr);
// 出力結果
0埋めすると  123です。

わかりましたか?
123の前に空白ができていますね。

0埋めはしたくないけど文字の幅は揃えたい、という時に役に立つかもしれませんね。

終わりに

今回はString.format()を使って、数字の頭を0埋めする方法をご紹介しました。
文字列はフォーマットを作成して使い回すことが多いと思うので、覚えておいて損はないでしょう。
以上です。それでは。