Java apache commons ExtendedMessageFormat サンプルプログラム
ExtendedMessageFormatの説明(google翻訳)
java.text.MessageFormatを拡張し、埋め込みフォーマット要素のプラグイン可能/追加の書式設定オプションを許可します。クライアントコードは、String形式名に関連付けられたFormatFactoryインスタンスのレジストリを指定する必要があります。フォーマット要素がメッセージパターンから解析されるとき、このレジストリは調べられるでしょう。この方法でカスタムパターンを指定することができ、java.text.MessageFormatでサポートされているフォーマットは、フォーマットやフォーマットスタイルのレベルでオーバーライドできます(MessageFormatを参照)。メッセージパターンに埋め込まれた “フォーマット要素”が指定されます((?)はオプション性を意味します)。
{引数-number(、書式名(、書式スタイル)?)?}
format-nameとformat-styleの値は、周囲の空白をjava.text.MessageFormatの方法で整えます。 format-nameがレジストリ内のFormatFactory formatFactoryInstanceを示す場合、formatFactoryInstanceからformat-nameおよびformat-styleに一致するFormatが要求されます。これが成功すると、このフォーマット要素には見つかったフォーマットが使用されます。注意:さまざまなサブフォーマットのmutatorメソッドは不要です。それらは親クラスに存在し、このクラスの仕事が設定可能な方法で提供するカスタマイズのタイプを可能にします。したがって、これらのメソッドは無効にされ、呼び出されるとUnsupportedOperationExceptionがスローされます。
java.text.MessageFormatから継承された制限:
「選択」サブフォーマットを使用する場合、ネストされた書式設定命令のサポートは、基本クラスによって提供されるものに限定されます。
MessageFormat、したがってExtendedMessageFormatを含む形式のスレッド安全性は保証されません
java.text.MessageFormatを拡張しています。
ExtendedMessageFormat
package jp.pjin.tech.java; import org.apache.commons.lang3.text.ExtendedMessageFormat; public class CommonsExample24 { public static void main(String[] args) throws Exception { ExtendedMessageFormat msgFormat = new ExtendedMessageFormat("{0}は、なんと未入力です。入力してほしいです。"); System.out.println(msgFormat.toPattern()); System.out.println(msgFormat.format(new String[] { "あぶらはむ" })); System.out.println(ExtendedMessageFormat.format("{0} 以上 {1} 以下の数字を入力してください。", new Object[] { 3, 5 })); } }
ExtendedMessageFormat#formatが、staticで用意されていますが、内部的にはインスタンス化されてフォーマットして返しています。