モジュール java.base
パッケージ 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: one of 
             number date time choice
    
     FormatStyle:
             short
             medium
             long
             full
             integer
             currency
             percent
             SubformatPattern
     

    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で処理されるのかを示すようにしてください。 ローカライザは、変換した文字列でオリジナルのバージョンにはない単一引用符を使用しなければならない場合があります。

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

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

    FormatTypeおよびFormatStyleの値をFormatインスタンスにマップする方法を示します
    FormatType FormatStyle 生成されるサブフォーマット
    (なし) (なし) null
    number (なし) NumberFormat.getInstance(getLocale())
    integer NumberFormat.getIntegerInstance(getLocale())
    currency NumberFormat.getCurrencyInstance(getLocale())
    percent NumberFormat.getPercentInstance(getLocale())
    SubformatPattern new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(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())
    time (なし) DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())
    short DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())
    medium DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())
    long DateFormat.getTimeInstance(DateFormat.LONG, getLocale())
    full DateFormat.getTimeInstance(DateFormat.FULL, getLocale())
    SubformatPattern new SimpleDateFormat(subformatPattern, getLocale())
    choice SubformatPattern new ChoiceFormat(subformatPattern)

    使用例

    次にいくつかの使用例を示します。 もちろん実際の国際化されたプログラムでは、メッセージ・フォーマット・パターンやその他の静的な文字列はリソース・バンドルから取得されます。 その他のパラメータは実行時に動的に決定されます。

    最初の例では、staticメソッドMessageFormat.formatを使用しています。このメソッドは内部的に、1度限りの使用目的で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 Date(), event);
     
    出力結果は次のようになります。
     At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
     

    次の例では、繰返し使用可能なMessageFormatインスタンスを作成しています。

     int fileCount = 1273;
     String diskName = "MyDisk";
     Object[] testArgs = {new Long(fileCount), diskName};
    
     MessageFormat form = new MessageFormat(
         "The disk \"{1}\" contains {0} file(s).");
    
     System.out.println(form.format(testArgs));
     
    fileCountにさまざまな値を設定した場合の出力結果を次に示します。
     The disk "MyDisk" contains 0 file(s).
     The disk "MyDisk" contains 1 file(s).
     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);
    
     int fileCount = 1273;
     String diskName = "MyDisk";
     Object[] testArgs = {new Long(fileCount), diskName};
    
     System.out.println(form.format(testArgs));
     
    fileCountにさまざまな値を設定した場合の出力結果を次に示します。
     The disk "MyDisk" contains no files.
     The disk "MyDisk" contains one file.
     The disk "MyDisk" contains 1,273 files.
     

    上の例のようにChoiceFormatをプログラム的に作成できますが、次のようにパターンを使用することもできます。 詳細は、ChoiceFormatを参照してください。

    
     form.applyPattern(
        "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
     

    注: 上記からわかるように、MessageFormatChoiceFormatによって生成される文字列の扱いはかなり特殊です。「{」の存在によってサブフォーマットであることを示し、再帰処理を行っています。 MessageFormatChoiceFormatを両方とも(文字列パターンとしてではなく)プログラム的に作成する場合には、再帰的に繰り返すフォーマットを作成して永久ループに陥らないように注意してください。

    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")}
     

    Synchronization

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

    導入されたバージョン:
    1.1
    関連項目:
    Locale, Format, NumberFormat, DecimalFormat, DecimalFormatSymbols, ChoiceFormat, DateFormat, SimpleDateFormat, 直列化された形式
    • ネストされたクラスのサマリー

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

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

      すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      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​()
      メッセージ・フォーマットの現在の状態を表すパターンを返します。
    • コンストラクタの詳細

      • MessageFormat

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

        public MessageFormat​(String pattern,
                             Locale locale)
        指定されたロケールとパターンのためのMessageFormatを構築します。 コンストラクタはロケールを設定してからパターンを解析し、含まれているフォーマット要素についてサブフォーマットのリストを作成します。 パターンとその解釈はクラスの概要で指定されています。
        パラメータ:
        pattern - このメッセージ・フォーマットのためのパターン
        locale - このメッセージ・フォーマットのためのロケール
        例外:
        IllegalArgumentException - パターンが無効な場合
        NullPointerException - patternnullの場合
        導入されたバージョン:
        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​()
        メッセージ・フォーマットの現在の状態を表すパターンを返します。 文字列は内部情報から構築されるので、以前に適用されたパターンと等しくなるとは限りません。
        戻り値:
        メッセージ・フォーマットの現在の状態を表すパターン
      • 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個より少ない場合、使用不可です。

        サブフォーマット、引数、およびフォーマットされたテキストの例
        サブフォーマット 引数 フォーマットされたテキスト
        任意 使用不可 "{" + argumentIndex + "}"
        任意 null "null"
        instanceof ChoiceFormat 任意 subformat.format(argument).indexOf('{') >= 0 ?
        (new MessageFormat(subformat.format(argument), getLocale())).format(argument) : subformat.format(argument)
        != 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 - 入力では、必要であれば位置合わせフィールド。 出力では、その位置合わせフィールドのオフセット。
        戻り値:
        resultとして渡される文字列バッファー。フォーマットされたテキストが付加される
        例外:
        IllegalArgumentException - arguments配列内の引数が、それを使用するフォーマット要素によって予測された型でない場合。
        NullPointerException - resultnullの場合
      • 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の場合
      • 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
        戻り値:
        このインスタンスの複製。
        関連項目:
        Cloneable
      • equals

        public boolean equals​(Object obj)
        2つのメッセージ・フォーマット・オブジェクトの間の等号比較です。
        オーバーライド:
        equals、クラス: Object
        パラメータ:
        obj - 比較対象の参照オブジェクト。
        戻り値:
        このオブジェクトがobj引数と同じである場合はtrue、それ以外の場合はfalse
        関連項目:
        Object.hashCode()HashMap