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

formatメソッド(String.format)の使い方

この記事では、Javaのformatメソッドについて紹介します!

formatメソッドは、「書式指定子」を使うことで、引数に指定した値をさまざまな形式に変換できるメソッドです。

書式指定子には、10進数を表す「%d」や文字を表す「%s」などさまざまなものがあります。

詳しくは、Javaのリファレンスを確認してみてください。

Formatter(Java Platform SE 8)

例えば、数字を3桁で0埋めしたり、日付を任意の形式で整形したりといった場合で活用されます。

基本的な記述方法は、次の通りです。

String.format(書式文字列, 値);

実際に使ってみると、次のように記述できます。

■記述例
public class Main {
  public static void main(String[] args){
    // 10進数で数値を表現します
    System.out.println(String.format("10進数:%d", 1230));
    // 6桁で0埋めして表現します
    System.out.println(String.format("0埋め:%06d", 1230));
    // 8進数で数値を表現します
    System.out.println(String.format("8進数:%o", 1230));
    // 16進数で数値を表現します
    System.out.println(String.format("16進数:%x", 1230));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
10進数:1230
0埋め:001230
8進数:2316
16進数:4ce

上記のように、さまざまな書式で表現できているのがわかります。

文字列をformatメソッドで表現することも可能です。

■記述例
public class Main {
  public static void main(String[] args){
    System.out.println(String.format("%sで%sを勉強しよう!", "ポテパンスタイル", "format"));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
ポテパンスタイルでformatを勉強しよう!

このように、formatメソッドで書式を整えられます。

数値をformatする方法

ここからは、それぞれのデータ型に合わせたformat方法を紹介します。

まず、数値をformatするクラスとして、Javaには以下の2つが用意されています。

  1. NumberFormatクラス
  2. DecimalFormatクラス

これらのクラスを使うことで、カンマ区切りで数値を表現したり、0埋めしたりなどの場合に便利です。

それぞれ使い方を見ていきましょう。

NumberFormatクラス

NumberFormatクラスには、次のメソッドが用意されています。

メソッド 詳細
getNumberInstance() カンマ区切り形式
getCurrencyInstance() 通貨形式
getPercentInstance() パーセント形式
getInstance() デフォルト形式(getNumberInstanceと同じ)

それぞれ使って確認してみましょう。

次のように記述できます。

■記述例
import java.text.NumberFormat;

public class Main {
  public static void main(String[] args){
    NumberFormat nNum = NumberFormat.getNumberInstance();
    NumberFormat nCur = NumberFormat.getCurrencyInstance();
    NumberFormat nPer = NumberFormat.getPercentInstance();
    NumberFormat nIns = NumberFormat.getInstance();

    System.out.println(nNum.format(10000000));
    System.out.println(nCur.format(10000000));
    System.out.println(nPer.format(0.9000));
    System.out.println(nIns.format(10000000));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
10,000,000
¥10,000,000
90%
10,000,000

それぞれ、メソッド内容に合わせた表示形式になっているのがわかります。

DecimalFormatクラス

DecimalFormatクラスは、独自でフォーマットパターンを指定したいときに使えるクラスです。

そのため、NumberFormatクラスのようにメソッドの用意はありません。

フォーマットを決めるパターン文字として、次のものが用意されています。

パターン文字 詳細
0 数値1桁を表し、該当桁に数値が存在しない場合は”0″を表示
# 数値1桁を表し、該当桁に数値が存在しない場合はブランク
. 小数点を表示
, カンマを表示
マイナスを表示
% 数値を100倍してパーセント表示

それぞれを使ってみると、次のように記述できます。

■記述例
import java.text.DecimalFormat;

public class Main {
  public static void main(String[] args){
    DecimalFormat dNum1 = new DecimalFormat("000000");
    DecimalFormat dNum2 = new DecimalFormat("######");
    DecimalFormat dNum3 = new DecimalFormat("0000.00");
    DecimalFormat dNum4 = new DecimalFormat("###,###");
    DecimalFormat dNum5 = new DecimalFormat("-######");
    DecimalFormat dNum6 = new DecimalFormat("##0.00%");

    System.out.println(dNum1.format(1000));
    System.out.println(dNum2.format(1000));
    System.out.println(dNum3.format(1000));
    System.out.println(dNum4.format(1000));
    System.out.println(dNum5.format(1000));
    System.out.println(dNum6.format(0.11));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
001000
1000
1000.00
1,000
-1000
11.00%

このように、それぞれ指定した書式になっているのがわかります!

doubleをformatする方法

doubleをformatする場合は、書式指定子を使って表現できます。

使える書式指定子は、次の通りです。

書式指定子 詳細
e、E 浮動小数点数形式の10進数
f 10進小数点数

では、実際に記述して確認してみましょう。

次のように記述できます。

■記述例
public class Main {
  public static void main(String[] args){
    double d = 12.3456;

    System.out.println(String.format("浮動小数点数形式の10進数(e):%e", d));
    System.out.println(String.format("浮動小数点数形式の10進数(E):%E", d));
    System.out.println(String.format("10進小数点数:%f", d));
    System.out.println(String.format("10進小数点数(少数第3位まで):%.3f", d));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
浮動小数点数形式の10進数(e):1.234560e+01
浮動小数点数形式の10進数(E):1.234560E+01
10進小数点数:12.345600
10進小数点数(少数第3位まで):12.346

日付をformatする方法

日付をformatするには、「DateTimeFormatterクラス」が使えます。

DateTimeFormatterのオブジェクトを生成するのに「ofPatternメソッド」を使い、引数に日付のフォーマットを設定可能です。

例えば、次のように記述できます。

■記述例
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
  public static void main(String[] args){
    LocalDateTime nowDateTime = LocalDateTime.now();
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
    String str = nowDateTime.format(dtf);
    System.out.println(str);
  }
}

LocalDateTimeクラスを使うことで、現在の日時を取得します。

取得した日時を「yyyy/MM/dd HH:mm:ss」の形で出力しましょう。

実行すると、次のように出力できました。

■実行結果
mbp:Desktop potepan$ java Main
2020/12/30 19:46:21

 

また、書式指定子でも表現可能です。

書式指定子 詳細
H 時間(00~23)
I 時間(01~12)
k 時間(0~23)
l 時間(1~12)
M 分(00~59)
S 秒(00~60)
※60はうるう秒が必要な場合の特殊な値
L ミリ秒(000~999)
N ナノ秒(000000000~ 999999999)
p 「am」または「pm」を表示
s 1970年1月1日からの秒数
Q 1970年1月1日からのミリ秒
B 月の英名(January や February など)
b 月の英名の略語表記(Jan や Feb など)
a 曜日の英名(Sunday や Monday など)
C 4桁の年を100で割った数値(00~99)
Y 年(2020 や 2019 など)
y 年の下2桁(20 や 19 など)
j 年の経過日数
m 月(01~12)
d 日にち(01~31)
e 日にち(1~31)

こちらも、現在の日時を表示してみます。

■記述例
import java.util.Date;

public class Main {
  public static void main(String[] args){
    Date date = new Date();
    System.out.println(String.format("%tY/%tm/%te %tH:%tM:%tS", date, date, date, date, date, date));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
2020/12/30 21:09:04

DateTimeFormatterクラスと同じ書式で表示できました!

formatでカンマ区切り

数値をカンマ区切りで表示する場合は、先述した3種類の方法を使って表現可能です。

  1. 書式指定子「%,d」を使う
  2. NumberFormatクラスを使う
  3. DecimalFormatクラスを使う

 

■記述例
import java.text.NumberFormat;
import java.text.DecimalFormat;

public class Main {
  public static void main(String[] args){
    String str = String.format("%,d", 10000000);
    NumberFormat nNum = NumberFormat.getNumberInstance();
    DecimalFormat dNum = new DecimalFormat("##,###,###");

    System.out.println(str);
    System.out.println(nNum.format(10000000));
    System.out.println(dNum.format(10000000));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
10,000,000
10,000,000
10,000,000

上記のように、どの方法を使っても3桁目でカンマ区切りを表現できます!

formatで0埋めをする

数値を0埋めしたい場合は、書式指定子を使うか、DecimalFormatクラスを使いましょう。

■記述例
import java.text.DecimalFormat;

public class Main {
  public static void main(String[] args){
    String str = String.format("%08d", 123);
    DecimalFormat dNum = new DecimalFormat("00000000");

    System.out.println(str);
    System.out.println(dNum.format(123));
  }
}
■実行結果
mbp:Desktop potepan$ java Main
00000123
00000123

formatで空白埋め

文字列を空白埋めするには、書式指定子を使って次のように記述できます。

■記述例
public class Main {
  public static void main(String[] args){
    String str01 = String.format("%6s", "スタイル");
    String str02 = String.format("%-6s", "ポテパン");

    System.out.println("ポテパン" + str01);
    System.out.println(str02 + "スタイル");
  }
}

「%」の後ろに空白を含めた数を指定すればOKです。

また、「-」を追加することで右側に空白を入れられます。

実行結果は次の通りです。

■実行結果
mbp:Desktop potepan$ java Main
ポテパン スタイル
ポテパン スタイル

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

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

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

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

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

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

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

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

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

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

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