Javaのprintf()は、フォーマットされた文字列をコンソールに表示するためのものです。
すでに前のチュートリアルでJavaのprintln()メソッドについて話し合いました。今日は、printf()メソッドとそのさまざまな実装について詳しく話し合います。準備はいいですか?始めましょう!
Javaのprintf()
- printf() method is not only there in C, but also in Java.
- This method belongs to the PrintStream class.
- It’s used to print formatted strings using various format specifiers.
構文 (こうぶん)
printf()メソッドの使用可能な構文は以下の通りです。
System.out.printf(string);
System.out.printf(format, arguments);
System.out.printf(locale, format, arguments);
最初のものは何のフォーマットも行わず、println() メソッドのようです。
System.out.format()メソッドは、System.out.printf()メソッドと同じです。
String.format()とSystem.out.printf()の違いは何ですか。
-
- String.format()はフォーマットされた文字列を返します。System.out.printf()もフォーマットされた文字列をコンソールに出力します。
- printf()はjava.util.Formatterクラスを使用して、フォーマット文字列を解析し出力を生成します。
フォーマット指定子
printfで利用可能なフォーマット指定子を見てみましょう。
- %c character
- %d decimal (integer) number (base 10)
- %e exponential floating-point number
- %f floating-point number
- %i integer (base 10)
- %o octal number (base 8)
- %s String
- %u unsigned decimal (integer) number
- %x number in hexadecimal (base 16)
- %t formats date/time
- %% print a percent sign
- \% print a percent sign
注意:%nまたは\nは、printf()で改行の区切りとして使用されます。
エスケープ文字
printf()で使用できるエスケープ文字は以下の通りです。
- \b backspace
- \f next line first character starts to the right of current line last character
- \n newline
- \r carriage return
- \t tab
- \\ backslash
フォーマット指定子の完全な構文
拡張セットを使ったフォーマット指定子の完全な構文を見てみましょう。
%<flags><width><.precision>specifier
フラグは、右寄せにする場合には+、左寄せにする場合には-として設定できます。それでは、Jshellを起動してprintf()を使い始めましょう!
数値の書式設定
例を挙げると、
| Welcome to JShell -- Version 12.0.1
| For an introduction type: /help intro
jshell> int x = 10
x ==> 10
jshell> System.out.printf("Formatted output is: %d %d%n", x, -x)
Formatted output is: 10 -10
厳密なフォーマットを使用しましょう。
jshell> float y = 2.28f
y ==> 2.28
jshell> System.out.printf("Precision formatting upto 4 decimal places %.4f\n",y)
Precision formatting upto 4 decimal places 2.2800
jshell> float z = 3.147293165f
z ==> 3.147293
jshell> System.out.printf("Precision formatting upto 2 decimal places %.2f\n",z)
Precision formatting upto 2 decimal places 3.15
第2の場合は、次の小数桁に四捨五入されることがわかるようになっています。
幅指定子、整列、ゼロで埋める
このセクションでは、それぞれについて3つの例を見ていきます。
jshell> System.out.printf("'%5.2f'%n", 2.28);
' 2.28'
指定子幅によって、5文字の幅が割り当てられていることがわかります。内容はデフォルトで右寄せされています。左側の空白部分には、以下のようにゼロで埋めることができます。
jshell> System.out.printf("'%05.2f'%n", 2.28);
'02.28'
jshell> System.out.printf("'%010.2f'%n", 2.28);
'0000002.28'
jshell> System.out.printf("'%010.2f'%n", -2.28);
'-000002.28'
jshell> System.out.printf("'%010.2f'%n", 1234567.89);
'1234567.89'
jshell> System.out.printf("'%010.2f'%n", -1234567.89);
'-1234567.89'
デフォルトで揃えると、+ の記号で右寄りになります。
jshell> System.out.printf("'%10.2f'%n", 2.28);
' 2.28'
次のコードは、左に配置されます。
jshell> System.out.printf("'%-10.2f'%n", 2.28);
'2.28 '
コンマとロケールの使用
jshell> System.out.printf(Locale.US, "%,d %n", 5000);
5,000
文字列、ブーリアンのフォーマット
いくつかの基本的な例を使って、Stringのフォーマットについて見てみましょう。
jshell> System.out.printf("%s %s!%n","Hello","World");
Hello World!
jshell> System.out.printf("%s\f%s!%n","Hello","World!");
Hello
World!!
jshell> System.out.printf("%s\\%s!%n","Hello","World!");
Hello\World!!
大文字:
jshell> System.out.printf("%s %S!%n","Hello","World");
Hello WORLD!
以下に、ブール値のフォーマットの例を示します。
jshell> System.out.printf("%b%n", false);
false
jshell> System.out.printf("%b%n", 0.5);
true
jshell> System.out.printf("%b%n", "false");
true
時間の形式化
「H」、「M」、「S」は、それぞれ時間、分、秒を表します。「L」、「N」は、ミリ秒とナノ秒をそれぞれ表します。「p」は、午前/午後を示します。「z」は、GMTとの差を出力します。
jshell> Date date = new Date();
date ==> Fri Apr 19 02:15:36 IST 2019
jshell> System.out.printf("%tT%n", date);
02:15:36
jshell> System.out.printf("H : %tH, M: %tM, S: %tS%n",date,date,date)
H : 02, M: 15, S: 36
後者は同じものが多く必要です。代わりに、それらを一つだけで置き換えることができます。
jshell> System.out.printf("%1$tH:%1$tM:%1$tS %1$Tp GMT %1$tz %n", date)
02:15:36 AM GMT +0530
日付の書式設定 (ひづけのしょしきせってい)
日付のフォーマットには以下の特殊文字があります:A/a – 完全な曜日/省略された曜日、B/b – 完全な月名/省略された月名、d – 二桁の日、m – 二桁の月、Y – 完全な年/年の下2桁、j – 年間の日数。
jshell> System.out.printf("%s %tB %<te, %<tY", "Current date: ", date);
Current date: April 19, 2019
jshell> System.out.printf("%1$td.%1$tm.%1$ty %n", date);
19.04.19
jshell> System.out.printf("%s %tb %<te, %<ty", "Current date: ", date);
Current date: Apr 19, 19
結論
このチュートリアルでは、printf()メソッドを使用して可能なさまざまな形式設定について説明しました。