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

この記事では、Javaのformatメソッドについて紹介します!
formatメソッドは、「書式指定子」を使うことで、引数に指定した値をさまざまな形式に変換できるメソッドです。
書式指定子には、10進数を表す「%d」や文字を表す「%s」などさまざまなものがあります。
詳しくは、Javaのリファレンスを確認してみてください。
例えば、数字を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つが用意されています。
- NumberFormatクラス
- 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種類の方法を使って表現可能です。
- 書式指定子「%,d」を使う
- NumberFormatクラスを使う
- 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 ポテパン スタイル ポテパン スタイル
 
               
     
     
     
     
   
       
     
  