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つの変換があります:

.

  1. 'o’ - 8進数

  2. '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

  1. コンピュータで10進数としてフォーマットされた 'e' または 'E' -

科学表記 。 'f' - 10進数としてフォーマット

  1. 四捨五入後の精度の値に基づいて '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);
}

=== 8 Formatter を使用する他の方法

これまでは、 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]。
前の投稿:map()とflatMap()の違い
次の投稿:SpringとJBehaveでのSerenity BDD