Java : Format - API使用例

Format (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

Formatは、日付、メッセージ、数字などのロケールに依存する情報をフォーマットするabstract基底クラスです。

クラス構成

Format クラスは、ロケール(言語、国・地域) に依存した情報を、そのロケールに適した表記へと変換(フォーマット) します。

例えば、通貨をフォーマットすると、ロケールによって

  • 日本 : ¥(円)
  • アメリカ : $ (ドル)

となります。

final var value = 1234;

final Format format1 = NumberFormat.getCurrencyInstance(Locale.JAPAN);
System.out.println(format1.format(value)); // ¥1,234

final Format format2 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format2.format(value)); // $1,234.00

補足


コンストラクタ

Format ()

唯一のコンストラクタです。

独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。

メソッド

Object clone ()

このオブジェクトのコピーを作成して、返します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var value = 1234;

final Format format = NumberFormat.getCurrencyInstance();
System.out.println(format.format(value)); // ¥1,234

if (format.clone() instanceof Format cloned) {
    System.out.println(cloned.format(value)); // ¥1,234
}

final String format (Object obj)

オブジェクトをフォーマットして文字列を作成します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final var value = 1234;

final Format format1 = NumberFormat.getCurrencyInstance();
System.out.println(format1.format(value)); // ¥1,234

final Format format2 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(format2.format(value)); // $1,234.00

abstract StringBuffer format (Object obj, StringBuffer toAppendTo, FieldPosition pos)

オブジェクトをフォーマットし、指定された文字列バッファに結果のテキストを追加します。

final var num = 123.456;

final Format format = NumberFormat.getNumberInstance(Locale.US);
System.out.println(format.format(num)); // 123.456

{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.INTEGER_FIELD);
    final var ret = format.format(num, sb, pos);
    System.out.println(ret); // num = 123.456

    System.out.println(pos.getBeginIndex()); // 6
    System.out.println(pos.getEndIndex()); // 9
}
{
    final var sb = new StringBuffer("num = ");
    System.out.println(sb); // num =

    final var pos = new FieldPosition(NumberFormat.FRACTION_FIELD);
    final var ret = format.format(num, sb, pos);
    System.out.println(ret); // num = 123.456

    System.out.println(pos.getBeginIndex()); // 10
    System.out.println(pos.getEndIndex()); // 13
}

AttributedCharacterIterator formatToCharacterIterator (Object obj)

Objectをフォーマットし、AttributedCharacterIteratorを生成します。

final var num = 123;

final Format format = NumberFormat.getNumberInstance(Locale.US);
System.out.println(format.format(num)); // 123

final var it = format.formatToCharacterIterator(num);

System.out.println("-- iterator --");
for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
    System.out.println(c);
}

// 結果
// ↓
//-- iterator --
//1
//2
//3

Object parseObject (String source)

指定された文字列の先頭からテキストを解析してオブジェクトを生成します。

System.out.println(Locale.getDefault().toLanguageTag()); // ja-JP

final Format format1 = NumberFormat.getCurrencyInstance();
final var ret1 = format1.parseObject("¥1,234");
System.out.println(ret1); // 1234

final Format format2 = NumberFormat.getCurrencyInstance(Locale.US);
final var ret2 = format2.parseObject("$1,234.00");
System.out.println(ret2); // 1234

abstract Object parseObject (String source, ParsePosition pos)

文字列からテキストを解析してオブジェクトを生成します。

final Format format = NumberFormat.getNumberInstance(Locale.US);

final var source = "123 456";
final var pos = new ParsePosition(0);

final var ret1 = format.parseObject(source, pos);
System.out.println(ret1); // 123
System.out.println(pos.getIndex()); // 3

pos.setIndex(pos.getIndex() + 1);

final var ret2 = format.parseObject(source, pos);
System.out.println(ret2); // 456
System.out.println(pos.getIndex()); // 7

final var ret3 = format.parseObject(source, pos);
System.out.println(ret3); // null

関連記事

ページの先頭へ