java.util.Formatterのガイド
1概要
2
Formatter
の使い方
Cの__printfを忘れないでください。
String greetings = String.format(
"Hello Folks, welcome to %s !",
"Baeldung");
結果の
String
は次のとおりです。
"Hello Folks, welcome to Baeldung !"
テンプレートは、いくつかの静的テキストと1つ以上のフォーマット指定子を含む
String
です。これらはどの引数を特定の位置に配置するかを示します。
この場合、** 対応する引数に置き換えられる単一のフォーマット指定子
%s
があります。
3フォーマット指定子
3.1. 一般的な構文
%[argument__index$][flags][width][.precision]conversion
**
**
**
**
**
上記の例で、引数の数を明示的に指定したい場合は、
1 $
および
2 $
引数インデックスを使用してそれを書くことができます。
これらはどちらもそれぞれ1番目と2番目の引数です。
String greetings = String.format(
"Hello %2$s, welcome to %1$s !",
"Baeldung",
"Folks");
3.2. 日付/時刻表現
の場合
%[argument__index$][flags][width]conversion
@Test
public void whenFormatSpecifierForCalendar__thenGotExpected() {
Calendar c = new GregorianCalendar(2017, 11, 10);
String s = String.format(
"The date is: %tm %1$te,%1$tY", c);
assertEquals("The date is: 12 10,2017", s);
}
そのため、最初の引数に
index
index__を指定しなくても構いませんが、他の2つにはそれを指定する必要があります。
3.3. 引数なしの書式指定子
%[flags][width]conversion
@Test
public void whenNoArguments__thenExpected() {
String s = String.format("John scored 90%% in Fall semester");
assertEquals("John scored 90% in Fall semester", s);
}
ʻ%’
を印刷したい場合は、
format()
の内側に、
ʻ%%’
を使用してエスケープする必要があります。
4コンバージョン
.
.
‘h’
または
‘H’
–
HashCode
の場合
.
‘s’
または
‘S’
–
String
の場合、
null
の場合は「null」、それ以外の場合は「null」を出力します.
arg.toString()
[source、java、gutter:、true]—-
@Test public void givenString
whenGeneralConversion
thenConvertedString(){String s = String.format( “正しい答えは%sです”、false); assertEquals( “正しい答えは偽です”、s);
s = String.format( “正しい答えは%bです”、null); assertEquals( “正しい答えは偽です”、s);
s = String.format( “正しい答えは%Bです”、true);
assertEquals( “正しい答えはTRUEです”、s);
}
Character.isValidCodePoint(int)
が
true
を返す場合、この変換は
int
型と
Integer
型にも使用できます。
-
必要に応じて、「c」または「C」と表記することができます。
いくつかの文字を印刷してみましょう。
@Test
public void givenString__whenCharConversion__thenConvertedString() {
String s = String.format("The correct answer is %c", 'a');
assertEquals("The correct answer is a", s);
s = String.format("The correct answer is %c", null);
assertEquals("The correct answer is null", s);
s = String.format("The correct answer is %C", 'b');
assertEquals("The correct answer is B", s);
s = String.format("The valid unicode character: %c", 0x0400);
assertTrue(Character.isValidCodePoint(0x0400));
assertEquals("The valid unicode character: Ѐ", s);
}
無効なコードポイントのもう1つの例を見てみましょう。
@Test(expected = IllegalFormatCodePointException.class)
public void whenIllegalCodePointForConversion__thenError() {
String s = String.format("The valid unicode character: %c", 0x11FFFF);
assertFalse(Character.isValidCodePoint(0x11FFFF));
assertEquals("The valid unicode character: Ā", s);
}
4.3. 数値 –
このカテゴリには3つの変換があります:
.
-
‘o’
– 8進数 -
‘X’
または
‘x’
– 16進数の場合
これらをそれぞれ印刷してみましょう。
@Test
public void whenNumericIntegralConversion__thenConvertedString() {
String s = String.format("The number 25 in decimal = %d", 25);
assertEquals("The number 25 in decimal = 25", s);
s = String.format("The number 25 in octal = %o", 25);
assertEquals("The number 25 in octal = 31", s);
s = String.format("The number 25 in hexadecimal = %x", 25);
assertEquals("The number 25 in hexadecimal = 19", s);
}
4.4. 数値 – 浮動小数点
Javaの浮動小数点型に使用されます:
float、Float、double、Double、
および
BigDecimal
-
コンピュータで10進数としてフォーマットされた
‘e’
または
‘E’
–
科学表記
。
‘f’
–
10進数としてフォーマット
-
四捨五入後の精度の値に基づいて
‘g’
または
‘G’
–
コンピュータ化された科学表記法または10進数形式への変換形式
浮動小数点数を印刷してみましょう。
@Test
public void whenNumericFloatingConversion__thenConvertedString() {
String s = String.format(
"The computerized scientific format of 10000.00 "
+ "= %e", 10000.00);
assertEquals(
"The computerized scientific format of 10000.00 = 1.000000e+04", s);
String s2 = String.format("The decimal format of 10.019 = %f", 10.019);
assertEquals("The decimal format of 10.019 = 10.019000", s2);
}
-
日付
と
テンポラルアクセス
簡単な例を見てみましょう.
[source、java、gutter:、true]—-
@テスト
public void whenLineSeparatorConversion__thenConvertedString(){
文字列s = String.format( “最初の行%n番目の行”);
assertEquals( “1行目\ n” + “2行目”、s);
}
=== ** 5フラグ** [source、java、gutter:、true]---- @Test public void whenSpecifyFlag__thenGotFormattedString(){String s = String.format( "左寄せフラグなし:%5d"、25); assertEquals( "左寄せフラグなし:25"、s); s = String.format( "左寄せフラグ付き:%-5d"、25); assertEquals( "左寄せフラグで:25"、s); }
===
6。精度
最初のステートメントは、浮動小数点を使った精度の例です。
数、そして2番目のものは一般的な変換を伴う:
[source、java、gutter:、true]—-
@Test public void whenSpecifyPrecision__thenGotExpected(){String s = String.format( “精度2の25.09878の出力:%.2f”、25.09878); assertEquals( “精度2の25.09878の出力:25.10″、s);
文字列s2 = String.format(
“精度2の一般変換型の出力:%0.2b”、true);
assertEquals( “精度2の一般変換タイプの出力:tr”、s2);
}
=== ** 7。引数インデックス** [source、java、gutter:、true]---- @Test public void whenSpecifyArgumentIndex__thenGotExpected(){Calendar c = Calendar.getInstance();} String s = String.format( "日付は%tm%1 $ te、%1 $ tY"、c); assertEquals( "日付は12 10,2017"、s); s = String.format( "日付は%tm%<te、%<tY"、c); assertEquals( "日付は12 10,2017"、s); }
これまでは、
Formatter
クラスの
format()メソッドを使用していました。
また、
Formatter
インスタンスを作成し、それを使用して
format()__メソッド。
-
Appendable
を渡すことでインスタンスを作成できます。
OutputStream
、
File
、またはファイル名** 。これに基づいて、フォーマットされた
String
は、
Appendable
、
OutputStream
、
File
に格納されています。
それぞれ。
__Apendableでそれを使う例を見てみましょう。
他の人たちと同じように。
====
8.1。
Appendable
で
Formatter
を使用する
S
__tringBuilder
インスタンス
sb
を作成し、
Formatter
を作成しましょう。
それを使って。それから
format()
を呼び出して
String__をフォーマットします。
[source、java、gutter:、true]—-
@テスト
public void whenCreateFormatter__thenFormatterWithAppendable(){
StringBuilder sb = new StringBuilder();
フォーマッタフォーマッタ=新しいフォーマッタ(sb);
formatter.format( “%sインスタンスに書いています。”、sb.getClass());
assertEquals(
“私はクラスjava.lang.StringBuilder Instanceに書いています。”、
sb.toString());
}
=== ** 9結論** この記事では、我々が提供するフォーマット機能を見ました。 __java.util.Formatter__クラス。我々はに使用することができる様々な構文を見ました 使用できる__String__と変換型をフォーマットします。 異なるデータ型 いつものように、私たちが見た例のためのコードは見つけることができます https://github.com/eugenp/tutorials/tree/master/core-java[over on Github]。