Webサイト制作コースのお申し込みはこちら

数字を出力する処理などでは、あらかじめ決められた桁数になるまで、数値の左側に0を埋め
る「ゼロ埋め」をすることがよくあります。

この記事では、Java でゼロ埋め処理をする方法を解説していきます。

ゼロ埋めとは

「ゼロ埋め」は、指定した桁数になるまで数値の左側にゼロを挿入する処理で、「ゼロパディング」と呼ぶこともあります。

例えば「109」という数字を、5桁になるようにゼロ埋めすると「00109」となります。

ゼロ埋めをやってみよう

さっそく、Java でゼロ埋めを行う処理を書いてみましょう。ゼロ埋めを行うには format メソッドを用います。fotmat メソッドの引数の1つ目には書式文字列を、2目の引数には書式化する値を指定します。

次のサンプルコードは、数値の「100」を全部で 6桁になるまで左側にゼロ埋めする例です。

public class Main {
    public static void main(String[] args) throws InterruptedException {
        int a = 100;
        System.out.println(String.format("%06d", a));
    }
}

■実行結果

000100

format メソッドの構文

上の例で引数の1つ目に %06d のような値を指定しましたが、このような形式を書式文字列と呼びます。String クラスの format メソッドでは、この書式文字列を指定することを、ゼロ埋め以外にもさまざまな文字列の書式編集を行えます。

書式文字列は「固定テキスト」と %から始まる「書式指示子」の大きく2つの要素で構成されます。

固定テキスト

「固定テキスト」はその名の通り、固定の文字を出力するもので、書式文字列に指定した文字が、そのまま format メソッドの結果として出力されます。

public class Main {
    public static void main(String[] args) throws InterruptedException {
        System.out.println(String.format("ここは固定テキストです"));
    }
}

■実行結果

ここは固定テキストです

書式指示子

先ほどゼロ埋めのサンプルコードでも使った「書式指示子」は、 % から始まる文字列で、%[インデックス$][フラグ][幅][.精度]型 の順に書式を指定し、[](角括弧 )の要素については指定を省略できます。

各書式の要素で指定する内容の詳細は次のとおりです。

■ インデックス

インデックスは、引数リスト内での引数の位置を1$, 2$, 3$, … の順に指定していきます。

例えば次の例では、書式文字列に “%2$s %1$s” と指定しているため、引数リストの逆の順番で書式指示子が割り当てられた文字列が生成されています。

String outStr = String.format("%2$s  %1$s", "引数1", "引数2");
System.out.println(outStr);  //-> 引数2  引数1
ポテパンダの一言メモ

インデックスを省略した場合は、書式識別子が出現した順番に、引数リストの値が割り当てられていきます。

■ フラグ

フラグは出力形式を指定します。指定する形式は型によって異なります。

いくつかフラグの例を見てみましょう。

//結果の左寄せ・右寄せ
System.out.println(String.format("%-5s", "A"));   //-> "A    "
System.out.println(String.format("%5s", "A"));    //-> "    A"
//カンマ区切り
System.out.println(String.format("%,d", 10000));  //-> "10,000"

■ 幅

出力する最小文字数を指定します。%05などのように指定することで、5桁になるまで前にゼロを挿入する、いわゆるゼロ埋めを行います。

■ 精度

小数点以下の桁数(浮動小数点数)を指定します。

■ 型

引数リストで指定する値の型を指定します。 書式指示子で指定できる型は多くありますが、代表的な型としては次のようなものがあります。

ゼロサプレス(前ゼロの削除)

逆に、ゼロ埋めで付けた先頭の「0」を削除するゼロサプレスの方法も見てみましょう。

ゼロサプレスとは、「00100」のような文字列から前のゼロを取り除いて「100」にする処理です。

ゼロサプレスは、format のような決まった巻数はなく、正規表現を使ってゼロを取り除く方法や、一度数値に変換してからゼロ埋めなして文字列化したりする方法があります。

それぞれ、サンプルコードを作ってみましょう。

正規表現でゼロサプレス

正規表現でゼロサプレスをする場合は次のようなコードになるでしょう。

^0+([0-9]+.*) の正規表現で、先頭から続くゼロをマッチングさせ、それ以降のゼロ以外の数値をグループ化することで、前のゼロのみを取り除いた数字を取り出すことができます。

import java.util.regex.*;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        String str = "002021";
        Pattern p = Pattern.compile("^0+([0-9]+.*)");
        Matcher m = p.matcher(str);
        if (m.matches()) {
            System.out.println(m.group(1));
        }
    }
}

■ 実行結果

2021

1度数値に変換する

もう一つの方法として、前ゼロが付いた文字列を1度数値に変換してから、再度文字列に変換することでもゼロサプレスできます。

public class Main {    public static void main(String[] args) throws Exception {        String str = "002021";        int intValue = Integer.parseInt(str);     //文字列を数値に変換        String outStr = String.valueOf(intValue); //数値をもう一度文字列に変換        System.out.println(outStr);    }}

■ 実行結果

2021

まとめ

数値のゼロ埋めなどで使用する format 関数と、ゼロ埋めした文字列から逆にゼロを取り除くゼロサプレスの処理について解説してきました。

数値のゼロ埋め(ゼロパディング)は、数値の桁数を揃えるシーンで多く使われるため、是非覚えておきましょう。

【関連記事】
【Java】printfメソッドで書式を指定して値を出力する方法

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。