|
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
内の format
arguments
- フォーマットするかまたは置き換えるオブジェクトからなる配列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
内の formatToCharacterIterator
arguments
- フォーマットするかまたは置き換えるオブジェクトからなる配列
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
内の parseObject
source
- 部分的に解析される String
pos
- 上記のインデックスおよびエラーインデックス情報を持つ ParsePosition
オブジェクト
Object
配列。エラーの場合は null を返す
NullPointerException
- pos
が null の場合public Object clone()
Format
内の clone
public boolean equals(Object obj)
Object
内の equals
obj
- 比較対象の参照オブジェクト
true
、そうでない場合は false
Object.hashCode()
,
Hashtable
public int hashCode()
Object
内の hashCode
Object.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.