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]。