全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
java.lang.Object | +----java.text.Format | +----java.text.MessageFormat
MessageFormat
は、連結されたメッセージを、言語に依存しない方法で作成するためのものです。エンドユーザ用に表示するメッセージは、この方法で構築してください。
MessageFormat
は、一組のオブジェクトをフォーマットし、フォーマットした文字列をパターンの適切な場所に挿入します。
Note:
MessageFormat
が他の Format
クラスと異なる点は、MessageFormat
オブジェクトをその構築子の1つで構築するということです(getInstance
スタイルのファクトリメソッドではなく)。MessageFormat
ではロケールに対して複雑なセットアップが必要ないので、ファクトリメソッドは必要ありません。実際、MessageFormat
に、ロケール固有の動作は一切実装されていません。
次に、この使用例をいくつか示します。
一般に、メッセージフォーマットはリソースから与えられ、引数は実行時に動的に設定されます。Object[] arguments = { new Integer(7), new Date(System.currentTimeMillis()), "a disturbance in the Force" }; String result = MessageFormat.format( "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.", arguments); output: At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
例 2:
Object[] testArgs = {new Long(3), "MyDisk"}; MessageFormat form = new MessageFormat( "The disk \"{1}\" contains {0} file(s)."); System.out.println(form.format(testArgs)); // output, with different testArgs output: The disk "MyDisk" contains 0 file(s). output: The disk "MyDisk" contains 1 file(s). output: The disk "MyDisk" contains 1,273 file(s).
このパターンは次の形式です。
messageFormatPattern := string ( "{" messageFormatElement "}" string )* messageFormatElement := argument { "," elementFormat } elementFormat := "time" { "," datetimeStyle } | "date" { "," datetimeStyle } | "number" { "," numberStyle } | "choice" { "," choiceStyle } datetimeStyle := "short" | "medium" | "long" | "full" | dateFormatPattern numberStyle := "currency" | "percent" | "integer" | numberFormatPattern choiceStyle := choiceFormatPattern
elementFormat
がない場合、引数は文字列でなければなりません(この文字列が使用されます)。dateTimeStyle
も numberStyle
もないと、デフォルトのフォーマットが使用されます(たとえば、NumberFormat.getInstance
、DateFormat.getTimeInstance
、またはDateFormat.getInstance
)。
文字列において、単一引用符を使うなら、必要に応じて "{"(波かっこ)を引用することができます。本来の単一引用符は '' で表します。messageFormatElement
の中では、引用符は除去されません。たとえば、{1,number,$'#',##}と指定すると、パウンド符号が引用された数値フォーマットが生成されます。結果は、"$#31,45"のようになります。
パターンを使用する場合、引用されていないかっこがあのならば、それらは一致しなければなりません。つまり、"ab {0} de" と "ab '}' de"は正しいのですが、"ab {0'}' de"と "ab } de"は正しくありません。
この引数は 0から 9の数字です。この数字は、フォーマットする配列で指定される引数の数に対応します。
配列の中に使用されない引数があってもかまいません。引数が足りなかったり、指定するフォーマットに対する正しいクラスのものでないと、 ParseException
がスローされます。format
はまず、その引数に対し、Format
オブジェクトが setFormats
メソッドで指定されているかどうかをチェックします。指定されていれば、format
はその Format
オブジェクトを使って、その引数をフォーマットします。指定がなければ、引数はそのオブジェクトの型に基づいてフォーマットされます。引数が Number
なら、format
は NumberFormat.getInstance
を使って引数をフォーマットします。引き数が Date
なら、format
は DateFormat.getDateTimeInstance
を使って引数をフォーマットします。それ以外の場合は、toString
メソッドを使用します。
さらに複雑なパターンの場合、ChoiceFormat
を使って次のように出力を得ることもできます。
これは、上の例のようにプログラム的に行うか、次のようにパターン(詳しくは、MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}."); double[] filelimits = {0,1,2}; String[] filepart = {"no files","one file","{0,number} files"}; ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart); form.setFormat(1,fileform); // NOT zero, see below Object[] testArgs = {new Long(12373), "MyDisk"}; System.out.println(form.format(testArgs)); // output, with different testArgs output: The disk "MyDisk" contains no files. output: The disk "MyDisk" contains one file. output: The disk "MyDisk" contains 1,273 files.
ChoiceFormat
を参照)を使って行うことができます
form.applyPattern( "There {0,choice,0#are no files|1#is one file|1#are {0,number,integer} files}.");
注: 上で見たように、MessageFormat
の ChoiceFormat
で生成される文字列は、特別に処理されます。複数の '{' を使ってサブフォーマットを表し、繰返しを行います。MessageFormat
と ChoiceFormat
を両方ともプログラム的に(文字列パターンではなく)作成する場合には、再帰的に繰り返すフォーマットを作成しないように気をつけてください。永久ロープになります。
注: フォーマットは、文字列における変数の順に従って数えられます。これは、引数の数え方と同じではありません! たとえば、"abc{2}def{3}ghi{0}..."の場合
public MessageFormat(String pattern)
public void setLocale(Locale theLocale)
public Locale getLocale()
public void applyPattern(String newPattern)
public String toPattern()
public void setFormats(Format newFormats[])
public void setFormat(int variable, Format newFormat)
public Format[] getFormats()
public final StringBuffer format(Object source[], StringBuffer result, FieldPosition ignore)
public static String format(String pattern, Object arguments[])
public final StringBuffer format(Object source, StringBuffer result, FieldPosition ignore)
public Object[] parse(String source, ParsePosition status)
注意: 解析はさまざまな状況により、うまく作動しないことがあります。たとえば、次のような場合です。
public Object[] parse(String source) throws ParseException
public Object parseObject(String text, ParsePosition status)
public Object clone()
public boolean equals(Object obj)
public int hashCode()
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス