|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object
|
+--java.text.Format
|
+--java.text.MessageFormat
MessageFormat は、連結されたメッセージを、言語に依存しない方法で構築するためのものです。エンドユーザ用に表示するメッセージは、この方法で構築してください。
MessageFormat は、1 組のオブジェクトをフォーマットし、フォーマットした文字列をパターンの適切な場所に挿入します。
注:
MessageFormat が他の Format クラスと異なる点は、MessageFormat オブジェクトを (getInstance スタイルのファクトリメソッドではなく) そのコンストラクタの 1 つで作成するということです。MessageFormat では、ロケール固有の動作は実装されていないので、ファクトリメソッドは必要ありません。ロケール固有の動作は、提供するパターンおよび挿入された引数に使用するサブフォーマットによって定義されます。
MessageFormat は次のパターンを使用します。
MessageFormatPattern:
String
MessageFormatPattern FormatElement String
FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
FormatType: one of
number date time choice
FormatStyle:
short
medium
long
full
integer
currency
percent
SubformatPattern
String:
StringPartopt
String StringPart
StringPart:
''
' QuotedString '
UnquotedString
SubformatPattern:
SubformatPatternPartopt
SubformatPattern SubformatPatternPart
SubFormatPatternPart:
' QuotedPattern '
UnquotedPattern
String 内では、"''" は単一引用符を表します。QuotedString は単一引用符を除く任意の文字を含みます。囲んでいる単一引用符は削除されます。UnquotedString は、単一引用符と左大括弧を除く任意の文字を含みます。したがって、フォーマットされたメッセージで "'{0}'" になる文字列は、"'''{'0}''" または "'''{0}'''" と記述します。
SubformatPattern 内では異なるルールが適用されます。QuotedPattern は単一引用符以外の任意の文字を含みますが、囲んでいる単一引用符は削除されません。このため単一引用符はサブフォーマットによって解釈されます。たとえば、"{1,number,$'#',##}" と指定すると、ハッシュ記号 (#) が付いた数値フォーマットが生成されます。結果は、「$#31,45」のようになります。UnquotedPattern は、単一引用符以外の任意の文字を含みますが、その中の中括弧はペアになっている必要があります。たとえば、"ab {0} de" と "ab '}' de" は有効なサブフォーマットパターンですが、"ab {0'}' de" と "ab } de" は無効です。
ArgumentIndex 値は、数字 0 〜 9 を使用して記述した 0 以上の整数です。format メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列のインデックスを表します。
FormatType および FormatStyle 値は、フォーマット要素の Format インスタンスの生成に使用します。次の表に、Format インスタンスへの値のマップについて示します。表にない組み合わせは使用できません。SubformatPattern は、使用する Format サブクラスに対して有効なパターン文字列でなければなりません。
| フォーマットタイプ | フォーマットスタイル | 生成されるサブフォーマット | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| (なし) | null
| ||||||||||||||||
number
| (なし) | NumberFormat.getInstance(getLocale())
| |||||||||||||||
integer
| NumberFormat.getIntegerInstance(getLocale())
| ||||||||||||||||
currency
| NumberFormat.getCurrencyInstance(getLocale())
| ||||||||||||||||
percent
| NumberFormat.getPercentInstance(getLocale())
| ||||||||||||||||
| SubformatPattern | new DecimalFormat(subformatPattern, new DecimalFormatSymbols(getLocale()))
| ||||||||||||||||
date
| (なし) | DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())
| |||||||||||||||
short
| DateFormat.getDateInstance(DateFormat.SHORT, getLocale())
| ||||||||||||||||
medium
| DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())
| ||||||||||||||||
long
| DateFormat.getDateInstance(DateFormat.LONG, getLocale())
| ||||||||||||||||
full
| DateFormat.getDateInstance(DateFormat.FULL, getLocale())
| ||||||||||||||||
| SubformatPattern | new SimpleDateFormat(subformatPattern, getLocale())
| ||||||||||||||||
この使用例を次に示します。
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).
さらに複雑なパターンの場合、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.setFormatByArgumentIndex(0, fileform);
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 を両方とも (文字列パターンではなく) プログラム的に作成する場合には、再帰的に繰り返すフォーマットを作成しないように注意してください。永久ループになります。
1 つの引数が文字列内で複数回解析されると、最後に一致するものが解析の最終結果になります。次に例を示します。
MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
Object[] objs = {new Double(3.1415)};
String result = mf.format( objs );
// result now equals "3.14, 3.1"
objs = null;
objs = mf.parse(result, new ParsePosition(0));
// objs now equals {new Double(3.1)}
同様に、同じ引数が複数回出てくるパターンを使って MessageFormat オブジェクトを解析すると、最後に一致するものが返されます。次に例を示します。
MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
String forParsing = "x, y, z";
Object[] objs = mf.parse(forParsing, new ParsePosition(0));
// result now equals {new String("z")}
メッセージフォーマットは同期化されません。スレッドごとに別のフォーマットインスタンスを作成することをお勧めします。複数のスレッドがフォーマットに同時にアクセスする場合は、外部的に同期化する必要があります。
Locale,
Format,
NumberFormat,
DecimalFormat,
ChoiceFormat,
直列化された形式| 入れ子クラスの概要 | |
static class |
MessageFormat.Field
MessageFormat.formatToCharacterIterator から返された AttributedCharacterIterator 内の属性キーとして使用する定数を定義します。 |
| クラス java.text.Format から継承した入れ子クラス |
|
| コンストラクタの概要 | |
MessageFormat(String pattern)
デフォルトロケールと指定されたパターンのための MessageFormat を構築します。 |
|
MessageFormat(String pattern,
Locale locale)
指定されたロケールとパターンのための MessageFormat を構築します。 |
|
| メソッドの概要 | |
void |
applyPattern(String pattern)
このメッセージフォーマットによって使用されるパターンを設定します。 |
Object |
clone()
このオブジェクトのコピーを作成して、返します。 |
boolean |
equals(Object obj)
2 つのメッセージフォーマットオブジェクトの間の等号比較です。 |
StringBuffer |
format(Object[] arguments,
StringBuffer result,
FieldPosition pos)
オブジェクトの配列をフォーマットし、提供された StringBuffer に、フォーマット要素をフォーマットされたオブジェクトによって置き換えて MessageFormat のパターンを追加します。
|
StringBuffer |
format(Object arguments,
StringBuffer result,
FieldPosition pos)
オブジェクトの配列をフォーマットし、提供された StringBuffer に、フォーマット要素をフォーマットされたオブジェクトで置き換えて、MessageFormat のパターンを追加します。 |
static String |
format(String pattern,
Object[] arguments)
指定されたパターンを使って MessageFormat を作成し、それを使用して指定された引数をフォーマットします。 |
AttributedCharacterIterator |
formatToCharacterIterator(Object arguments)
オブジェクトの配列をフォーマットし、それを MessageFormat のパターンに挿入して、AttributedCharacterIterator を生成します。 |
Format[] |
getFormats()
あらかじめ設定されたパターン文字列内のフォーマット要素に使用されるフォーマットを取得します。 |
Format[] |
getFormatsByArgumentIndex()
format メソッドに渡される値または parse メソッドから返された値に使用されるフォーマットを取得します。 |
Locale |
getLocale()
サブフォーマットを作成または比較する場合に使用されるロケールを取得します。 |
int |
hashCode()
メッセージフォーマットオブジェクトのハッシュコードを生成します。 |
Object[] |
parse(String source)
指定された文字列の先頭からテキストを解析してオブジェクト配列を生成します。 |
Object[] |
parse(String source,
ParsePosition pos)
文字列を解析します。 |
Object |
parseObject(String source,
ParsePosition pos)
文字列からテキストを解析してオブジェクト配列を生成します。 |
void |
setFormat(int formatElementIndex,
Format newFormat)
あらかじめ設定されたパターン文字列内の指定されたフォーマット要素インデックスで、フォーマット要素に使用するフォーマットを設定します。 |
void |
setFormatByArgumentIndex(int argumentIndex,
Format newFormat)
指定された引数インデックスを使用する、あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。 |
void |
setFormats(Format[] newFormats)
あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。 |
void |
setFormatsByArgumentIndex(Format[] newFormats)
format メソッドに渡される値または parse メソッドから返された値に使用するフォーマットを設定します。 |
void |
setLocale(Locale locale)
サブフォーマットを作成または比較する場合に使用するロケールを設定します。 |
String |
toPattern()
メッセージフォーマットの現在の状態を表すパターンを返します。 |
| クラス java.text.Format から継承したメソッド |
format, parseObject |
| クラス java.lang.Object から継承したメソッド |
finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
public MessageFormat(String pattern)
pattern - このメッセージフォーマットのためのパターン
IllegalArgumentException - パターンが無効な場合
public MessageFormat(String pattern,
Locale locale)
pattern - このメッセージフォーマットのためのパターンlocale - このメッセージフォーマットのためのロケール
IllegalArgumentException - パターンが無効な場合| メソッドの詳細 |
public void setLocale(Locale locale)
applyPattern および toPattern メソッドと format および formatToCharacterIterator メソッドへの呼び出しに影響します。
locale - サブフォーマットを作成または比較する場合に使用するロケールpublic Locale getLocale()
public void applyPattern(String pattern)
pattern - このメッセージフォーマットのためのパターン
IllegalArgumentException - パターンが無効な場合public String toPattern()
public void setFormatsByArgumentIndex(Format[] newFormats)
format メソッドに渡される値または parse メソッドから返された値に使用するフォーマットを設定します。newFormats 内の要素のインデックスは、あらかじめ設定されたパターン文字列で使用される引数インデックスに対応します。したがって、newFormats 内のフォーマットの順序は format メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列内の要素の順序に対応します。
引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、対応する新しいフォーマットがそのすべてのフォーマット要素に使用されます。引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、対応する新しいフォーマットは無視されます。提供されたフォーマットが必要数に満たない場合、newFormats.length より少ない引数インデックスに対するフォーマットだけが置き換えられます。
newFormats - 使用する新しいフォーマット
NullPointerException - newFormats が null の場合public void setFormats(Format[] newFormats)
newFormats 内のフォーマットの順序は、パターン文字列内のフォーマット要素の順序に対応します。
パターン文字列で必要とするよりも多くのフォーマットが提供された場合、余ったフォーマットは無視されます。必要数に満たない場合は、最初の newFormats.length だけが置き換えられます。
パターン文字列内のフォーマット要素の順序は地域対応化の処理過程で変更されることが多いため、通常は setFormatsByArgumentIndex メソッドを使用する方が効率的です。このメソッドは、フォーマットの順序を format メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列内の要素の順序に対応するものと見なします。
newFormats - 使用する新しいフォーマット
NullPointerException - newFormats が null の場合
public void setFormatByArgumentIndex(int argumentIndex,
Format newFormat)
メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列のインデックスを表します。
引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、新しいフォーマットがそのすべてのフォーマット要素に使用されます。引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、新しいフォーマットは無視されます。
- パラメータ:
argumentIndex - 新しいフォーマットに使用するための引数インデックスnewFormat - 使用する新しいフォーマット- 導入されたバージョン:
- 1.4
public void setFormat(int formatElementIndex,
Format newFormat)
パターン文字列内のフォーマット要素の順序は、地域対応化の処理過程で変更されることが多いため、通常は setFormatByArgumentIndex メソッドを使用する方が効率的です。このメソッドは、フォーマット要素が指定する引数インデックスを基に、フォーマット要素にアクセスします。
formatElementIndex - パターン内のフォーマット要素のインデックスnewFormat - 指定されたフォーマット要素に使うフォーマット
ArrayIndexOutOfBoundsException - formatElementIndex が、パターン文字列内のフォーマット要素の数以上の場合public Format[] getFormatsByArgumentIndex()
format メソッドに渡される値または parse メソッドから返された値に使用されるフォーマットを取得します。返された配列内の要素のインデックスは、あらかじめ設定されたパターン文字列で使用される引数インデックスに対応します。したがって、返された配列内のフォーマットの順序は、format メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列内の要素の順序に対応します。
引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、その最後のフォーマット要素で使用されるフォーマットが配列に返されます。引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、null が配列に返されます。
public Format[] getFormats()
パターン文字列内のフォーマット要素の順序は地域対応化の処理過程で変更されることが多いため、通常は getFormatsByArgumentIndex メソッドを使用する方が効率的です。このメソッドは、フォーマットの順序を format メソッドに渡された arguments 配列または parse メソッドによって返された結果の配列内の要素の順序に対応するものと見なします。
public final StringBuffer format(Object[] arguments,
StringBuffer result,
FieldPosition pos)
StringBuffer に、フォーマット要素をフォーマットされたオブジェクトによって置き換えて MessageFormat のパターンを追加します。
個々のフォーマット要素に置換されたテキストは、次の表の最初に一致する行で示されるように、フォーマット要素の現在のサブフォーマットとフォーマット要素の引数インデックスにある arguments 要素から得られます。引数は、arguments が nullであるか、または要素の数が argumentIndex+1 個より少ない場合、使用不可です。
| サブフォーマット | 引数 | フォーマットされたテキスト |
|---|---|---|
| 任意 | 使用不可 | "{" + argumentIndex + "}"
|
| 任意 | null
| "null"
|
instanceof ChoiceFormat
| 任意 | subformat.format(argument).indexOf('{') >= 0 ?
|
!= null
| 任意 | subformat.format(argument)
|
null
| instanceof Number
| NumberFormat.getInstance(getLocale()).format(argument)
|
null
| instanceof Date
| DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale()).format(argument)
|
null
| instanceof String
| argument
|
null
| 任意 | argument.toString()
|
pos が null でなく、かつ Field.ARGUMENT を参照している場合、最初のフォーマットされた文字列の位置が返されます。
arguments - フォーマットするかまたは置き換える対象のオブジェクトからなる配列result - テキストが追加される位置pos - 入力の場合は位置合わせフィールド (必要な場合)。出力の場合は位置合わせフィールドのオフセット
IllegalArgumentException - arguments 配列内の引数が、それを使用するフォーマット要素によって予測されたタイプでない場合
public static String format(String pattern,
Object[] arguments)
(new MessageFormat(pattern)).format(arguments, new StringBuffer(), null).toString()
IllegalArgumentException - パターンが無効の場合、または arguments 配列内の引数が、それを使用するフォーマット要素によって予測されたタイプでない場合
public final StringBuffer format(Object arguments,
StringBuffer result,
FieldPosition pos)
StringBuffer に、フォーマット要素をフォーマットされたオブジェクトで置き換えて、MessageFormat のパターンを追加します。これは以下の記述と同等です。
format((Object[]) arguments, result, pos)
Format 内の formatarguments - フォーマットするかまたは置き換えるオブジェクトからなる配列result - テキストが追加される位置pos - 入力の場合は位置合わせフィールド (必要な場合)。出力の場合は位置合わせフィールドのオフセット
toAppendTo として渡される文字列バッファ。フォーマットされたテキストが追加される
IllegalArgumentException - arguments 配列内の引数が、それを使用するフォーマット要素によって予測されたタイプでない場合public AttributedCharacterIterator formatToCharacterIterator(Object arguments)
MessageFormat のパターンに挿入して、AttributedCharacterIterator を生成します。返された AttributedCharacterIterator を使用すると、結果の String を構築できると共に、結果の String についての情報を判定できます。
返された AttributedCharacterIterator のテキストは、以下の記述によって返されるテキストと同一です。
format(arguments, new StringBuffer(), null).toString()
さらに、AttributedCharacterIterator は、少なくとも arguments 配列内の引数からテキストが生成された位置を示す属性を含みます。これらの属性のキーは MessageFormat.Field 型です。属性の値は、テキストが生成された引数の arguments 配列内のインデックスを示す Integer オブジェクトです。
MessageFormat が使用する基本の Format インスタンスからの属性/値も、結果の AttributedCharacterIterator に配置されます。これにより、結果の String 内の引数の位置がわかるだけでなく、その引数がどのフィールドに含まれているかもわかります。
Format 内の formatToCharacterIteratorarguments - フォーマットするかまたは置き換えるオブジェクトからなる配列
NullPointerException - arguments が null の場合
IllegalArgumentException - arguments 配列内の引数が、それを使用するフォーマット要素によって予測されたタイプでない場合
public Object[] parse(String source,
ParsePosition pos)
注意: 解析はさまざまな原因のために、うまく動作しないことがあります。たとえば、次のような場合です。
public Object[] parse(String source)
throws ParseException
メッセージの解析についての詳細は parse(String, ParsePosition) を参照してください。
source - 先頭が解析される String
Object 配列
ParseException - 指定された文字列の先頭が解析できない場合
public Object parseObject(String source,
ParsePosition pos)
メソッドは、pos によって指定されたインデックスを開始位置としてテキストの解析を試みます。解析が完了すると、pos のインデックスは、使用された最後の文字 (解析では、文字列の最後までのすべての文字が使用されるとは限らない) のあとのインデックスに更新され、解析されたオブジェクト配列が返されます。更新された pos は、このメソッドの次の呼び出しの開始点を示すために使用できます。エラーが発生した場合は、pos のインデックスは変更されず、エラーが発生した文字のインデックスに pos のエラーインデックスが設定され、null が返されます。
メッセージの解析についての詳細は parse(String, ParsePosition) を参照してください。
Format 内の parseObjectsource - 部分的に解析される Stringpos - 上記のインデックスおよびエラーインデックス情報を持つ ParsePosition オブジェクト
Object 配列。エラーの場合は null を返す
NullPointerException - pos が null の場合public Object clone()
Format 内の clonepublic boolean equals(Object obj)
Object 内の equalsobj - 比較対象の参照オブジェクト
true、そうでない場合は falseObject.hashCode(),
Hashtablepublic int hashCode()
Object 内の hashCodeObject.equals(java.lang.Object),
Hashtable
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.