Java : Format - API使用例
Format (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
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 のサブクラスに、日時を変換する DateFormat, SimpleDateFormat があります。
ただし、それらは 古い日時API である Dateクラスを使います。
よって DateFormat や SimpleDateFormat は使わずに、代わりに DateTimeFormatter を使うことをおすすめします。
コンストラクタ
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)
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