全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
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}..."の場合
 
 MessageFormat(String)
	MessageFormat(String)
   
 applyPattern(String)
	applyPattern(String)
   clone()
	clone()
   equals(Object)
	equals(Object)
   format(Object, StringBuffer, FieldPosition)
	format(Object, StringBuffer, FieldPosition)
   format(Object[], StringBuffer, FieldPosition)
	format(Object[], StringBuffer, FieldPosition)
   format(String, Object[])
	format(String, Object[])
   getFormats()
	getFormats()
   getLocale()
	getLocale()
   hashCode()
	hashCode()
   parse(String)
	parse(String)
   parse(String, ParsePosition)
	parse(String, ParsePosition)
   parseObject(String, ParsePosition)
	parseObject(String, ParsePosition)
   setFormat(int, Format)
	setFormat(int, Format)
   setFormats(Format[])
	setFormats(Format[])
   setLocale(Locale)
	setLocale(Locale)
   toPattern()
	toPattern()
   
 MessageFormat
MessageFormat
public MessageFormat(String pattern)
 
 setLocale
setLocale
public void setLocale(Locale theLocale)
 getLocale
getLocale
public Locale getLocale()
 applyPattern
applyPattern
public void applyPattern(String newPattern)
 toPattern
toPattern
public String toPattern()
 setFormats
setFormats
public void setFormats(Format newFormats[])
 setFormat
setFormat
  public void setFormat(int variable,
                        Format newFormat)
 getFormats
getFormats
public Format[] getFormats()
 format
format
  public final StringBuffer format(Object source[],
                                   StringBuffer result,
                                   FieldPosition ignore)
 format
format
  public static String format(String pattern,
                              Object arguments[])
 format
format
  public final StringBuffer format(Object source,
                                   StringBuffer result,
                                   FieldPosition ignore)
 parse
parse
  public Object[] parse(String source,
                        ParsePosition status)
注意: 解析はさまざまな状況により、うまく作動しないことがあります。たとえば、次のような場合です。
 parse
parse
public Object[] parse(String source) throws ParseException
 parseObject
parseObject
  public Object parseObject(String text,
                            ParsePosition status)
 clone
clone
public Object clone()
 equals
equals
public boolean equals(Object obj)
 hashCode
hashCode
public int hashCode()
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス