クラスMessageFormat

java.lang.Object
java.text.Format
java.text.MessageFormat
すべての実装されたインタフェース:
Serializable, Cloneable

public class MessageFormat extends Format
MessageFormatは、連結されたメッセージを、言語に依存しない方法で構築するためのものです。 このクラスを使用して、エンド・ユーザーに表示されるメッセージを作成します。

MessageFormatは、1組のオブジェクトをフォーマットし、フォーマットした文字列をパターンの適切な場所に挿入します。

ノート: MessageFormatがほかのFormatクラスと異なる点は、MessageFormatオブジェクトを(getInstanceスタイルのファクトリ・メソッドではなく)そのコンストラクタの1つで作成するということです。 MessageFormatでは、ロケール固有の動作は実装されていないので、ファクトリ・メソッドは必要ありません。 ロケール固有の動作は、提供するパターンおよび挿入された引数に使用するサブフォーマットによって定義されます。

パターンとその解釈

MessageFormatは次のパターンを使用します。
 MessageFormatPattern:
         String
         MessageFormatPattern FormatElement String

 FormatElement:
         { ArgumentIndex }
         { ArgumentIndex , FormatType }
         { ArgumentIndex , FormatType , FormatStyle }

 FormatType:
         number
         dtf_date
         dtf_time
         dtf_datetime
         pre-defined DateTimeFormatter(s)
         date
         time
         choice
         list

 FormatStyle:
         short
         medium
         long
         full
         integer
         currency
         percent
         compact_short
         compact_long
         or
         unit
         SubformatPattern
 

ArgumentIndex値は、数字'0' - '9'を使用して記述した0以上の整数です。formatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列のインデックスを表します。

FormatTypeおよびFormatStyle値は、フォーマット要素のFormatインスタンスの生成に使用します。 次の表に、Formatインスタンスへの値のマップについて示します。 これらの値は、applyPattern(String)に渡されると大/小文字が区別されません。 表にない組み合わせは使用できません。 SubformatPatternは、使用するFormatサブクラスに対して有効なパターン文字列である必要があります。

FormatTypeおよびFormatStyleの値をFormatインスタンスにマップする方法を示します
FormatType FormatStyle 生成されるサブフォーマット
(なし) (なし) null
number (なし) NumberFormat.getInstance(getLocale())
integer NumberFormat.getIntegerInstance(getLocale())
currency NumberFormat.getCurrencyInstance(getLocale())
percent NumberFormat.getPercentInstance(getLocale())
compact_short NumberFormat.getCompactNumberInstance(getLocale(), NumberFormat.Style.SHORT)
compact_long NumberFormat.getCompactNumberInstance(getLocale(), NumberFormat.Style.LONG)
SubformatPattern new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(getLocale()))
dtf_date (なし) DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
dtf_time (なし) DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
dtf_datetime (なし) DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
pre-defined DateTimeFormatter(s) (なし) pre-defined DateTimeFormatter(s)FormatTypeとして使用されます : BASIC_ISO_DATE, ISO_LOCAL_DATE, ISO_OFFSET_DATE, ISO_DATE, ISO_LOCAL_TIME, ISO_OFFSET_TIME, ISO_TIME, ISO_LOCAL_DATE_TIME, ISO_OFFSET_DATE_TIME, ISO_ZONED_DATE_TIME, ISO_DATE_TIME, ISO_ORDINAL_DATE, ISO_WEEK_DATE, ISO_INSTANT, RFC_1123_DATE_TIME
date (なし) DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())
short DateFormat.getDateInstance(DateFormat.SHORT, getLocale())
medium DateFormat.getDateInstance(DateFormat.MEDIUM, getLocale())
long DateFormat.getDateInstance(DateFormat.LONG, getLocale())
full DateFormat.getDateInstance(DateFormat.FULL, getLocale())
SubformatPattern new SimpleDateFormat(subformatPattern, getLocale())
time (なし) DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())
short DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())
medium DateFormat.getTimeInstance(DateFormat.MEDIUM, getLocale())
long DateFormat.getTimeInstance(DateFormat.LONG, getLocale())
full DateFormat.getTimeInstance(DateFormat.FULL, getLocale())
SubformatPattern new SimpleDateFormat(subformatPattern, getLocale())
choice SubformatPattern new ChoiceFormat(subformatPattern)
list (なし) ListFormat.getInstance(getLocale(), ListFormat.Type.STANDARD, ListFormat.Style.FULL)
or ListFormat.getInstance(getLocale(), ListFormat.Type.OR, ListFormat.Style.FULL)
unit ListFormat.getInstance(getLocale(), ListFormat.Type.UNIT, ListFormat.Style.FULL}

パターン内の見積ルール

String内で1組の単一引用符を使用して、単一引用符を除く任意の文字を囲むことができます。 たとえば、パターン文字列"'{0}'"は、FormatElementではなく、文字列"{0}"を表します。 単一引用符自体を表すには、String全体で単一引用符を2つにする('')必要があります。 たとえば、パターン文字列"'{''}'"は、'{''}' (左右の中括弧が引用符で囲まれたもの) ではなく'{ (引用の開始と左中括弧)、'' (単一引用符)、}' (右中括弧と引用の終了)が連続するものとして解釈され、文字列"{}" ではなく"{'}"を表します。

SubformatPatternは対応するサブフォーマットで解釈され、サブフォーマットに依存するパターンのルールが適用されます。 たとえば、パターン文字列"{1,number,$'#',##}" (下線付きのSubformatPattern)と指定すると、ハッシュ記号(#)が付いた数値フォーマットが生成されます。結果は、 "$#31,45"のようになります。 詳細は、Formatサブクラスのドキュメントを参照してください。

一致しない引用符は、指定されたパターンの最後で閉じられるものとして処理されます。 たとえば、パターン文字列"'{0}"はパターン"'{0}'"として処理されます。

引用符で囲まれていないパターン内の中括弧のバランスを取る必要があります。 たとえば、"ab {0} de""ab '}' de"は有効なパターンですが、"ab {0'}' de""ab } de""''{''"は無効です。

警告:
メッセージ・フォーマット・パターン内での引用符の使用ルールは、あまり明快ではありません。 特に、単一引用符を二重にする必要の有無がローカライザにとっては明らかでないこともあります。 ローカライザにルールについて情報を提供し、リソースにバンドルされるソース・ファイル内のコメントなどによって、どの文字列がMessageFormatで処理されるのかを示すようにしてください。 ローカライザは、変換した文字列でオリジナルのバージョンにはない単一引用符を使用しなければならない場合があります。

使用方法

次の例は、MessageFormatの一般的な使用方法を示しています。 国際化されたプログラムでは、メッセージ形式パターンやその他の静的文字列がリソース・バンドルから取得される可能性があります。

int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
    planet, new GregorianCalendar(2053, Calendar.JULY, 3, 12, 30).getTime(), event);
resultは、次を返します:
 At 12:30:00 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
 

より高度なパターンのために、ChoiceFormatMessageFormatとともに使用して、単数形および複数形の正確なフォームを生成できます:

MessageFormat msgFmt = new MessageFormat("The disk \"{0}\" contains {1,choice,0#no files|1#one file|1< {1,number,integer} files}.");
Object[] args = {"MyDisk", fileCount};
String result = msgFmt.format(args);
fileCountに異なる値を持つresultは、次の値を返します:
 The disk "MyDisk" contains no files.
 The disk "MyDisk" contains one file.
 The disk "MyDisk" contains 1,273 files.
 

ノート: 前のスニペットに示すように、MessageFormatChoiceFormatによって生成された文字列は特別として扱われ、'{'が出現してサブフォーマットを示し、再帰を引き起こします。 FormatElementChoiceFormatパターンで定義されている場合、指定されたFormatTypeおよびFormatStyleパターンに従ってのみフォーマットされます。 最上位レベルMessageFormatの関連付けられたサブフォーマットは、ChoiceFormatパターンで定義されたFormatElementには適用されません。 MessageFormatChoiceFormatを両方とも(文字列パターンとしてではなく)プログラム的に作成する場合には、再帰的に繰り返すフォーマットを作成して永久ループに陥らないように注意してください。

日付と時間の書式設定

MessageFormatは、java.time.formatおよびjava.textパッケージの日時フォーマッタをサポートするパターンを提供します。 日付が11/16/2023:である次の3つの例を考えてみます

1) 「フル」 FormatStyleを含むdate FormatType

Object[] arg = {new GregorianCalendar(2023, Calendar.NOVEMBER, 16).getTime()};
var fmt = new MessageFormat("The date was {0,date,full}");
fmt.format(arg); // returns "The date was Thursday, November 16, 2023"

2) dtf_date FormatType「フル」 FormatStyle

Object[] arg = {LocalDate.of(2023, 11, 16)};
var fmt = new MessageFormat("The date was {0,dtf_date,full}");
fmt.format(arg); // returns "The date was Thursday, November 16, 2023"

3) ISO_LOCAL_DATE FormatType

Object[] arg = {LocalDate.of(2023, 11, 16)};
var fmt = new MessageFormat("The date was {0,ISO_LOCAL_DATE}");
fmt.format(arg); // returns "The date was 2023-11-16"

解析中

1つの引数が文字列内で複数回解析されると、最後に一致するものが解析の最終結果になります。 たとえば、

MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
Object[] objs = {Double.valueOf(3.1415)};
String result = mf.format( objs );
// result now equals "3.14, 3.1"
objs = mf.parse(result, new ParsePosition(0));
// objs now equals {Double.valueOf(3.1)}

同様に、同じ引数が複数回出てくるパターンを使ってMessageFormatオブジェクトを解析すると、最後に一致するものが返されます。 たとえば、

MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
String forParsing = "x, y, z";
Object[] objs = mf.parse(forParsing, new ParsePosition(0));
// objs now equals {new String("z")}

Synchronization

メッセージ・フォーマットは同期化されません。 スレッドごとに別のフォーマット・インスタンスを作成することをお薦めします。 複数のスレッドがフォーマットに並行してアクセスする場合は、外部的に同期化する必要があります。

導入されたバージョン:
1.1
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static class 
    MessageFormat.formatToCharacterIteratorから返されたAttributedCharacterIterator内の属性キーとして使用する定数を定義します。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    デフォルトのFORMATロケールと指定されたパターンのためのMessageFormatを構築します。
    MessageFormat(String pattern, Locale locale)
    指定されたロケールとパターンのためのMessageFormatを構築します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    このメッセージ・フォーマットによって使用されるパターンを設定します。
    このオブジェクトのコピーを作成して、返します。
    boolean
    指定されたオブジェクトをこのMessageFormatと比較し、等しいかどうかを確認します。
    format(Object[] arguments, StringBuffer result, FieldPosition pos)
    オブジェクトの配列をフォーマットし、提供されたStringBufferに、フォーマット要素をフォーマットされたオブジェクトによって置き換えてMessageFormatのパターンを追加します。
    format(Object arguments, StringBuffer result, FieldPosition pos)
    オブジェクトの配列をフォーマットし、提供されたStringBufferに、フォーマット要素をフォーマットされたオブジェクトによって置き換えてMessageFormatのパターンを追加します。
    static String
    format(String pattern, Object... arguments)
    指定されたパターンを使ってMessageFormatを作成し、それを使用して指定された引数をフォーマットします。
    オブジェクトの配列をフォーマットし、それをMessageFormatのパターンに挿入して、AttributedCharacterIteratorを生成します。
    あらかじめ設定されたパターン文字列内のフォーマット要素に使用されるフォーマットを取得します。
    formatメソッドに渡される値またはparseメソッドから返された値に使用されるフォーマットを取得します。
    サブフォーマットを作成または比較する場合に使用されるロケールを取得します。
    int
    このMessageFormatのハッシュ・コード値を返します。
    parse(String source)
    指定された文字列の先頭からテキストを解析してオブジェクト配列を生成します。
    parse(String source, ParsePosition pos)
    文字列を解析します。
    文字列からテキストを解析してオブジェクト配列を生成します。
    void
    setFormat(int formatElementIndex, Format newFormat)
    あらかじめ設定されたパターン文字列内の指定されたフォーマット要素インデックスで、フォーマット要素に使用するフォーマットを設定します。
    void
    setFormatByArgumentIndex(int argumentIndex, Format newFormat)
    指定された引数インデックスを使用する、あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。
    void
    setFormats(Format[] newFormats)
    あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。
    void
    formatメソッドに渡される値またはparseメソッドから返された値に使用するフォーマットを設定します。
    void
    setLocale(Locale locale)
    サブフォーマットを作成または比較する場合に使用するロケールを設定します。
    このMessageFormatの現在の状態を表すpatterns sectionに付随する文字列パターンを返します。
    デバッグ用に、このMessageFormatを識別する文字列を返します。

    クラスjava.text.Formatで宣言されたメソッド

    format, parseObject

    クラスjava.lang.Objectで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • MessageFormat

      public MessageFormat(String pattern)
      デフォルトのFORMATロケールと指定されたパターンのためのMessageFormatを構築します。 コンストラクタはロケールを設定してからパターンを解析し、含まれているフォーマット要素についてサブフォーマットのリストを作成します。 パターンとその解釈はクラスの概要で指定されています。
      パラメータ:
      pattern - このメッセージ・フォーマットのためのパターン
      例外:
      IllegalArgumentException - パターンが無効な場合
      NullPointerException - patternnullの場合
    • MessageFormat

      public MessageFormat(String pattern, Locale locale)
      指定されたロケールとパターンのためのMessageFormatを構築します。 コンストラクタはロケールを設定してからパターンを解析し、含まれているフォーマット要素についてサブフォーマットのリストを作成します。 パターンとその解釈はクラスの概要で指定されています。
      実装要件:
      デフォルトの実装では、MessageFormatオブジェクトの作成時にlocalenullの場合、またはformat()がnullロケールでMessageFormatインスタンスによってコールされ、実装でロケール依存のサブフォーマットが使用される場合に、NullPointerExceptionがスローされます。
      パラメータ:
      pattern - このメッセージ・フォーマットのためのパターン
      locale - このメッセージ・フォーマットのためのロケール
      例外:
      IllegalArgumentException - パターンが無効な場合
      NullPointerException - patternnullまたはlocalenullであり、実装でロケールに依存するサブフォーマットが使用されている場合。
      導入されたバージョン:
      1.4
  • メソッドの詳細

    • setLocale

      public void setLocale(Locale locale)
      サブフォーマットを作成または比較する場合に使用するロケールを設定します。 これは、後に行われる次のようなメソッドへの呼出しに影響します。
      • applyPatternメソッドとtoPatternメソッド(フォーマット要素がフォーマット型を指定しており、そのためサブフォーマットがapplyPatternメソッドで作成される場合)
      • formatメソッドとformatToCharacterIteratorメソッド(フォーマット要素がフォーマット型を指定しておらず、そのためサブフォーマットがこれらの書式設定メソッドで作成される場合)。
      すでに作成されているサブフォーマットは影響を受けません。
      パラメータ:
      locale - サブフォーマットを作成または比較する場合に使用するロケール
    • getLocale

      public Locale getLocale()
      サブフォーマットを作成または比較する場合に使用されるロケールを取得します。
      戻り値:
      サブフォーマットを作成または比較する場合に使用されるロケール
    • applyPattern

      public void applyPattern(String pattern)
      このメッセージ・フォーマットによって使用されるパターンを設定します。 メソッドはパターンを解析し、含まれているフォーマット要素についてサブフォーマットのリストを作成します。 パターンとその解釈はクラスの概要で指定されています。
      パラメータ:
      pattern - このメッセージ・フォーマットのためのパターン
      例外:
      IllegalArgumentException - パターンが無効な場合
      NullPointerException - patternnullの場合
    • toPattern

      public String toPattern()
      このMessageFormatの現在の状態を表すpatterns sectionに付随する文字列パターンを返します。 文字列は内部情報から構築されるので、以前に適用されたパターンと等しくなるとは限りません。
      実装要件:
      MessageFormatの実装は、MessageFormat()コンストラクタまたはapplyPattern()に渡されると、このインスタンスと意味的に同等のインスタンスを生成する文字列を返します。 サブフォーマットを文字列パターンに変換できない場合、FormatTypeおよびFormatStyleFormatElementから省略されます。
      戻り値:
      このMessageFormatの現在の状態を表すpatterns sectionに準拠する文字列パターン
    • setFormatsByArgumentIndex

      public void setFormatsByArgumentIndex(Format[] newFormats)
      formatメソッドに渡される値またはparseメソッドから返された値に使用するフォーマットを設定します。 newFormats内の要素のインデックスは、あらかじめ設定されたパターン文字列で使用される引数インデックスに対応します。 したがって、newFormats内のフォーマットの順序はformatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列内の要素の順序に対応します。

      引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、対応する新しいフォーマットがそのすべてのフォーマット要素に使用されます。 引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、対応する新しいフォーマットは無視されます。 提供されたフォーマットが必要数に満たない場合、newFormats.lengthより少ない引数インデックスに対するフォーマットだけが置き換えられます。

      パラメータ:
      newFormats - 使用する新しいフォーマット
      例外:
      NullPointerException - newFormatsがnullである場合
      導入されたバージョン:
      1.4
    • setFormats

      public void setFormats(Format[] newFormats)
      あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。 newFormats内のフォーマットの順序は、パターン文字列内のフォーマット要素の順序に対応します。

      パターン文字列で必要とするよりも多くのフォーマットが提供された場合、余ったフォーマットは無視されます。 必要数に満たない場合は、最初のnewFormats.lengthだけが置き換えられます。

      パターン文字列内のフォーマット要素の順序はローカリゼーションの処理過程で変更されることが多いため、通常はsetFormatsByArgumentIndexメソッドを使用するほうが効率的です。このメソッドは、フォーマットの順序をformatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列内の要素の順序に対応するものと見なします。

      パラメータ:
      newFormats - 使用する新しいフォーマット
      例外:
      NullPointerException - newFormatsがnullである場合
    • setFormatByArgumentIndex

      public void setFormatByArgumentIndex(int argumentIndex, Format newFormat)
      指定された引数インデックスを使用する、あらかじめ設定されたパターン文字列内のフォーマット要素に使用するフォーマットを設定します。 引数インデックスはフォーマット要素定義の部分で、formatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列のインデックスを表します。

      引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、新しいフォーマットがそのすべてのフォーマット要素に使用されます。 引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、新しいフォーマットは無視されます。

      パラメータ:
      argumentIndex - 新しいフォーマットに使用するための引数インデックス
      newFormat - 使用する新しいフォーマット
      導入されたバージョン:
      1.4
    • setFormat

      public void setFormat(int formatElementIndex, Format newFormat)
      あらかじめ設定されたパターン文字列内の指定されたフォーマット要素インデックスで、フォーマット要素に使用するフォーマットを設定します。 フォーマット要素インデックスは、パターン文字列の先頭からカウントした、フォーマット要素のゼロから始まる数字です。

      パターン文字列内のフォーマット要素の順序は、ローカリゼーションの処理過程で変更されることが多いため、通常はsetFormatByArgumentIndexメソッドを使用するほうが効率的です。このメソッドは、フォーマット要素が指定する引数インデックスを基に、フォーマット要素にアクセスします。

      パラメータ:
      formatElementIndex - パターン内のフォーマット要素のインデックス
      newFormat - 指定されたフォーマット要素に使うフォーマット
      例外:
      ArrayIndexOutOfBoundsException - formatElementIndexが、パターン文字列内のフォーマット要素の数以上の場合
    • getFormatsByArgumentIndex

      public Format[] getFormatsByArgumentIndex()
      formatメソッドに渡される値またはparseメソッドから返された値に使用されるフォーマットを取得します。 返された配列内の要素のインデックスは、あらかじめ設定されたパターン文字列で使用される引数インデックスに対応します。 したがって、返された配列内のフォーマットの順序は、formatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列内の要素の順序に対応します。

      引数インデックスがパターン文字列内で複数のフォーマット要素に使用される場合、その最後のフォーマット要素で使用されるフォーマットが配列に返されます。 引数インデックスが文字列内でどのフォーマット要素にも使用されない場合は、nullが配列に返されます。

      戻り値:
      パターン内の引数に使用されるフォーマット
      導入されたバージョン:
      1.4
    • getFormats

      public Format[] getFormats()
      あらかじめ設定されたパターン文字列内のフォーマット要素に使用されるフォーマットを取得します。 返される配列内のフォーマットの順序は、パターン文字列内のフォーマット要素の順序に対応します。

      パターン文字列内のフォーマット要素の順序はローカリゼーションの処理過程で変更されることが多いため、通常はgetFormatsByArgumentIndexメソッドを使用するほうが効率的です。このメソッドは、フォーマットの順序をformatメソッドに渡されたarguments配列またはparseメソッドによって返された結果の配列内の要素の順序に対応するものと見なします。

      戻り値:
      パターン内のフォーマット要素に使用されるフォーマット
    • format

      public final StringBuffer format(Object[] arguments, StringBuffer result, FieldPosition pos)
      オブジェクトの配列をフォーマットし、提供されたStringBufferに、フォーマット要素をフォーマットされたオブジェクトによって置き換えてMessageFormatのパターンを追加します。

      個々のフォーマット要素に置換されたテキストは、次の表の最初に一致する行で示されるように、フォーマット要素の現在のサブフォーマットとフォーマット要素の引数インデックスにあるarguments要素から得られます。 引数は、argumentsnullであるか、または要素の数がargumentIndex+1個より少ない場合、使用不可です。

      サブフォーマット、引数およびフォーマット済テキストの例
      サブフォーマット 引数 フォーマットされたテキスト
      any 使用不可 "{" + argumentIndex + "}"
      null "null"
      instanceof ChoiceFormat any subformat.format(argument).indexOf('{') >= 0 ?
      (new MessageFormat(subformat.format(argument), getLocale())).format(argument) : subformat.format(argument)
      != null any subformat.format(argument)
      null instanceof Number NumberFormat.getInstance(getLocale()).format(argument)
      instanceof Date DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale()).format(argument)
      instanceof String argument
      any argument.toString()

      posがnullでなく、かつField.ARGUMENTを参照している場合、最初のフォーマットされた文字列の位置が返されます。

      パラメータ:
      arguments - フォーマットするかまたは置き換えるオブジェクトからなる配列。
      result - テキストが追加される位置。
      pos - 置換された最初の引数の位置を出力文字列で追跡します。
      戻り値:
      resultとして渡される文字列バッファー。フォーマットされたテキストが付加される
      例外:
      IllegalArgumentException - arguments配列内の引数が、それを使用するフォーマット要素によって予測された型でない場合。
      NullPointerException - resultnullの場合、またはこのメソッドをコールするMessageFormatインスタンスでロケールがnullに設定され、実装でロケール依存サブフォーマットが使用されている場合。
    • format

      public static String format(String pattern, Object... arguments)
      指定されたパターンを使ってMessageFormatを作成し、それを使用して指定された引数をフォーマットします。 これは次の記述と同等です。
      (new MessageFormat(pattern)).format(arguments, new StringBuffer(), null).toString()
      パラメータ:
      pattern - パターン文字列
      arguments - フォーマットするオブジェクト
      戻り値:
      フォーマットされた文字列
      例外:
      IllegalArgumentException - パターンが無効な場合、またはarguments配列内の引数が、それを使用するフォーマット要素によって予測された型でない場合。
      NullPointerException - patternnullの場合
    • format

      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配列内の引数が、それを使用するフォーマット要素によって予測された型でない場合。
      NullPointerException - resultnullの場合、またはこのメソッドをコールするMessageFormatインスタンスでロケールがnullに設定され、実装でロケール依存サブフォーマットが使用されている場合。
    • formatToCharacterIterator

      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内の引数の位置がわかるだけでなく、その引数がどのフィールドに含まれているかもわかります。

      オーバーライド:
      formatToCharacterIterator、クラスFormat
      パラメータ:
      arguments - フォーマットするかまたは置き換えるオブジェクトからなる配列。
      戻り値:
      フォーマットされた値を説明するAttributedCharacterIterator。
      例外:
      NullPointerException - argumentsがnullである場合。
      IllegalArgumentException - arguments配列内の引数が、それを使用するフォーマット要素によって予測された型でない場合。
      導入されたバージョン:
      1.4
    • parse

      public Object[] parse(String source, ParsePosition pos)
      文字列を解析します。

      注意: 解析はさまざまな原因のために、うまく動作しないことがあります。 たとえば、

      • 引数の1つがパターンにない。
      • 大きな数字が"many"にフォーマットされるようなchoiceフォーマットなどで、引数のフォーマットが情報を失う。
      • 繰返しをまだ処理しない(置き換える文字列に{n}個の参照がある場合)。
      • 解析の一部があいまいなとき、一致(または正しい一致)が必ずしも見つからない。 たとえば、パターン「{1},{2}」を文字列引数{"a,b", "c"}で使用する場合は、「a,b,c」とフォーマットされる。 その結果が解析されると、{"a", "b,c"}が返される。
      • 1つの引数が文字列内で複数回解析されると、あとの解析が優位になる。
      解析が失敗したときは、ParsePosition.getErrorIndex()を使用して、文字列のどこで解析が失敗したかを調べます。 返されるエラー・インデックスは、文字列の比較対象であるサブパターンの開始オフセットです。 たとえば、解析文字列「AAA {0} BBB」がパターン「AAD {0} BBB」と比較されている場合、エラー・インデックスは0です。 エラーが発生すると、このメソッドへの呼出しがnullを返します。 ソースがnullの場合、空の配列を返します。

      パラメータ:
      source - 解析する文字列
      pos - 解析位置
      戻り値:
      解析されたオブジェクトの配列
      例外:
      NullPointerException - posがnull以外のsource文字列のnullである場合。
    • parse

      public Object[] parse(String source) throws ParseException
      指定された文字列の先頭からテキストを解析してオブジェクト配列を生成します。 メソッドは指定された文字列のテキスト全体に使用されない場合もあります。

      メッセージの解析の詳細については、parse(String, ParsePosition)メソッドを参照してください。

      パラメータ:
      source - 先頭が解析されるString
      戻り値:
      文字列から解析されるObject配列。
      例外:
      ParseException - 指定された文字列の先頭が解析できない場合。
    • parseObject

      public Object parseObject(String source, ParsePosition pos)
      文字列からテキストを解析してオブジェクト配列を生成します。

      メソッドはposによって指定されたインデックスを開始位置としてテキストの解析を試みます。 解析が完了すると、posのインデックスは、使用された最後の文字(解析では、文字列の最後までのすべての文字が使用されるとは限らない)のあとのインデックスに更新され、解析されたオブジェクト配列が返されます。 更新されたposは、このメソッドの次の呼出しの開始点を示すのに使用できます。 エラーが発生した場合は、posのインデックスは変更されず、エラーが発生した文字のインデックスにposのエラー・インデックスが設定され、nullが返されます。

      メッセージの解析の詳細については、parse(String, ParsePosition)メソッドを参照してください。

      定義:
      parseObject、クラスFormat
      パラメータ:
      source - 部分的に解析されるString
      pos - 上記のインデックスおよびエラー・インデックス情報を持つParsePositionオブジェクト
      戻り値:
      文字列から解析されるObject配列。 エラーの場合はnullを返す。
      例外:
      NullPointerException - posがnullである場合。
    • clone

      public Object clone()
      このオブジェクトのコピーを作成して、返します。
      オーバーライド:
      clone、クラスFormat
      戻り値:
      このインスタンスの複製。
      関連項目:
    • equals

      public boolean equals(Object obj)
      指定されたオブジェクトをこのMessageFormatと比較し、等しいかどうかを確認します。 オブジェクトがMessageFormatでもあり、2つの書式で値が同じ書式である場合、trueを返します。
      オーバーライド:
      equals、クラスObject
      実装要件:
      このメソッドは、instanceofではなく、getClass()に基づくクラス・アイデンティティの概念を使用して等価チェックを実行します。 したがって、サブクラスのequalsメソッドでは、このクラスのインスタンスはサブクラスのインスタンスと等しく比較されません。
      パラメータ:
      obj - 等価性のために比較されるオブジェクト
      戻り値:
      指定されたオブジェクトがこのMessageFormatと等しい場合はtrue
      関連項目:
    • hashCode

      public int hashCode()
      このMessageFormatのハッシュ・コード値を返します。
      オーバーライド:
      hashCode、クラスObject
      実装要件:
      このメソッドは、toPattern()から返された値を使用してハッシュ・コード値を計算します。
      戻り値:
      このMessageFormatのハッシュ・コード値
      関連項目:
    • toString

      public String toString()
      デバッグ用に、このMessageFormatを識別する文字列を返します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      デバッグ用に、このMessageFormatを識別する文字列