Javaでのprintf()を使用したフォーマット
1. 前書き
In this tutorial, we’ll demonstrate different examples of formatting with the printf()method。
このメソッドはjava.io.PrintStreamクラスの一部であり、Cのprintf()関数と同様の文字列フォーマットを提供します。
2. 構文
次のPrintStreamメソッドのいずれかを使用して、出力をフォーマットできます。
System.out.printf(format, arguments);
System.out.printf(locale, format, arguments);
formatパラメータを使用してフォーマットルールを指定します。 ルールは‘%'文字で始まります。
さまざまなフォーマットルールの詳細に入る前に、簡単な例を見てみましょう。
System.out.printf("Hello %s!%n", "World");
これにより、以下の出力が生成されます。
Hello World!
上記のように、フォーマット文字列にはプレーンテキストと2つのフォーマット規則が含まれています。 最初のルールは、文字列引数のフォーマットに使用されます。 2番目のルールは、文字列の末尾に改行文字を追加します。
2.1. フォーマット規則
フォーマット文字列をさらに詳しく見てみましょう。 リテラルとフォーマット指定子で構成されます。 次の順序でFormat specifiers include flags, width, precision, and conversion characters:
%[flags][width][.precision]conversion-character
括弧内の指定子はオプションです。
内部的には、printf()はjava.util.Formatterクラスを使用してフォーマット文字列を解析し、出力を生成します。 追加のフォーマット文字列オプションは、Formatter Javadocにあります。
2.2. 変換文字
The conversion-character is required and determines how the argument is formatted。 変換文字は特定のデータ型でのみ有効です。 一般的なものは次のとおりです。
-
s –文字列をフォーマットします
-
d –10進整数をフォーマットします
-
f –浮動小数点数をフォーマットします
-
t–日付/時刻値をフォーマットします
これらと他のいくつかについては、この記事の後半で説明します。
2.3. オプションの修飾子
The [flags] define standard ways to modify the outputであり、整数と浮動小数点数のフォーマットに最も一般的です。
The [width] specifies the field width for outputting the argument.出力に書き込まれる最小文字数を表します。
浮動小数点値を出力する場合はThe [.precision] specifies the number of digits of precision。 さらに、これを使用して、Stringから抽出する部分文字列の長さを定義できます。
3. 行区切り記号
To break the string into separate lines, we have a %n specifier:
System.out.printf("example%nline%nterminator");
上記のコードスニペットは、次の出力を生成します。
example
line
terminator
The %n separator printf() will automatically insert the host system’s native line separator。
4. ブールフォーマット
To format boolean values, we use the %b format。 これは次のように機能します。入力値がtrueの場合、出力はtrueです。 それ以外の場合、出力はfalseです。
だから、私たちがするなら:
System.out.printf("%b%n", null);
System.out.printf("%B%n", false);
System.out.printf("%B%n", 5.3);
System.out.printf("%b%n", "random text");
次に、次のように表示されます。
false
FALSE
TRUE
true
大文字の書式設定に%Bを使用できることに注意してください。
5. 文字列のフォーマット
To format a simple string, we’ll use the %s combination。 さらに、文字列を大文字にすることができます。
printf("'%s' %n", "example");
printf("'%S' %n", "example");
そして出力は次のとおりです。
'example'
'example'
また、最小の長さを指定するために、widthを指定できます。
printf("'%15s' %n", "example");
それは私たちに与えます:
' example'
文字列を左揃えにする必要がある場合は、 ‘-‘ flagを使用できます。
printf("'%-10s' %n", "example");
そして出力は次のとおりです。
'example '
さらに、precisionを指定することで、出力の文字数を制限できます。
System.out.printf("%2.2s", "Hi there!");
%x.ys構文の最初の‘x'番号は、パディングです。 ‘y'は文字数です。
ここでの例では、出力はHiです。
6. 文字のフォーマット
%cの結果はUnicode文字です。
System.out.printf("%c%n", 's');
System.out.printf("%C%n", 's');
大文字のCは、結果を大文字にします。
s
S
ただし、無効な引数を指定すると、FormatterはIllegalFormatConversionExceptionをスローします。
7. 数値のフォーマット
7.1. 整数フォーマット
printf()メソッドは、言語で使用可能なすべての整数を受け入れます。 byte, short, int, longとBigInteger (%dを使用する場合):
System.out.printf("simple integer: %d%n", 10000L);
‘d'文字を使用すると、次のようになります。
simple integer: 10000
to format our number with the thousands separator, we can use the ‘,' flag.が必要な場合は、結果をさまざまなロケールに合わせてフォーマットすることもできます。
System.out.printf(Locale.US, "%,d %n", 10000);
System.out.printf(Locale.ITALY, "%,d %n", 10000);
ご覧のとおり、米国のフォーマットはイタリアのフォーマットとは異なります。
10,000
10.000
7.2. フロートおよびダブルフォーマット
浮動小数点数をフォーマットするには、「f」フォーマットが必要です。
System.out.printf("%f%n", 5.1473);
どれが出力されます:
5.147300
もちろん、最初に頭に浮かぶのは、precisionを制御することです。
System.out.printf("'%5.2f'%n", 5.1473);
ここでは、数値のwidthを5として定義し、小数部の長さは2:です。
' 5.15'
ここでは、定義済みの幅をサポートするために、番号の先頭から1つのスペースパディングがあります。
出力in scientific notation, we just use the ‘e' conversion characterを取得するには:
System.out.printf("'%5.2e'%n", 5.1473);
結果は次のとおりです。
'5.15e+00'
8. 日付と時刻のフォーマット
日付と時刻のフォーマットについては、the conversion string is a sequence of two characters: the ‘t' or ‘T' character and the conversion suffix。 例を使用して、最も一般的な時刻と日付のフォーマットのサフィックス文字を調べてみましょう。
間違いなく、より高度なフォーマットには、Java 8以降で使用可能なDateTimeFormatterを使用できます。
8.1. 時間フォーマット
まず、タイムフォーマットに役立つサフィックス文字のリストを見てみましょう。
-
入力Dateからの‘H', ‘M', ‘S' – characters are responsible for extracting the hours, minutes and second
-
‘L', ‘N' –それに応じてミリ秒とナノ秒で時間を表します
-
‘p' –午前/午後の書式を追加
-
‘z' –タイムゾーンオフセットを出力します
ここで、Dateの時間部分を出力したいとします。
Date date = new Date();
System.out.printf("%tT%n", date);
上記のコードと‘%tT'の組み合わせにより、次の出力が生成されます。
13:51:15
より詳細な書式設定が必要な場合は、異なる時間セグメントを呼び出すことができます。
System.out.printf("hours %tH: minutes %tM: seconds %tS%n", date, date, date);
‘H'、‘M'、および‘S'を使用すると、次のようになります。
hours 13: minutes 51: seconds 15
ただし、date を複数回リストするのは面倒です。 または、to get rid of multiple arguments, we can use the index reference of our input parameter which is 1$ in our case:
System.out.printf("%1$tH:%1$tM:%1$tS %1$tp %1$tL %1$tN %1$tz %n", date);
ここでは、出力として現在の時間、am / pm、ミリ秒単位の時間、ナノ秒、およびタイムゾーンオフセットが必要です。
13:51:15 pm 061 061000000 +0400
8.2. 日付のフォーマット
時間の書式設定と同様に、日付の書式設定用の特別な書式設定文字があります。
-
‘A' –曜日全体を出力します
-
‘d' –月の2桁の日をフォーマットします
-
‘B' –は完全な月の名前です
-
‘m' –2桁の月をフォーマットします
-
‘Y' –年を4桁で出力します
-
‘y' –年の下2桁を出力します
したがって、曜日を表示し、その後に月を表示する場合:
System.out.printf("%1$tA, %1$tB %1$tY %n", date);
次に、‘A'、‘B'、および‘Y'を使用すると、次のようになります。
Thursday, November 2018
結果をすべて数値形式にするために、「A', ‘B', ‘Y」の文字を「d', ‘m', ‘y'」に置き換えることができます。
System.out.printf("%1$td.%1$tm.%1$ty %n", date);
結果は次のようになります。
22.11.18
9. 概要
この記事では、PrintStream#printfメソッドを使用して出力をフォーマットする方法について説明しました。 一般的なデータ型の出力を制御するために使用されるさまざまな形式パターンを調べました。
最後に、いつものように、ディスカッション中に使用されたコードはover on GitHubで見つけることができます。