目次
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 ポテパン スタイル ポテパン スタイル