フォーマットパターン MessageFormat

2010年04月10日 15時25分 Java



※対象バージョン:Java1.4

MessageFormat オブジェクトはメッセージ(文字列)のテンプレートと個々の機能で生成された値を別々に管理し、メッセージとして出力する際に値をテンプレートに埋め込んで出力することができる機能です。MessageFormat の必要性として以下のような場合があります。

  • 複数の画面があり、各画面は同様な機能を提供している場合。
    例えば工場毎に似たような管理画面が複数ある場合、同じ画面ではないが似たような画面を作ることがあります。こういったケースでは画面毎にメッセージを定義すると統一されない、保守性が低下するといった問題が発生します。
  • メッセージの形式に変更がある場合。
    メッセージの形式に変更がある場合、形式が変更になると文字列の連結処理の変更も必要となり、個別の対応は大変です。またメッセージの内容はプロパティファイルで定義することは可能ですが、形式まではプロパティファイルだけでは対応できません。

サンプルコード

// MessageFormat の例
String fStr = "私の名前は{0}です。今年で{1}歳になります。"; // テンプレート文字列
Format format1 = new MessageFormat(fStr); // MessagFormat オブジェクトの生成
String[] array = { "ままの", "27" };
System.out.println(format1.format(array));
array = new String[]{ "はるにゃん", "21" };
System.out.println(format1.format(array));

/******* プログラム実行結果 **********************************************************
 * 私の名前はままのです。今年で27歳になります。
 * 私の名前ははるにゃんです。今年で21歳になります。
**************************************************************************************/

 
非常にシンプルな例です。テンプレートとなる文字列を指定し、MessageFormat オブジェクトの生成します。MessageFormat の format() メソッドを実行するとテンプレートに値が埋め込まれた(フォーマットされた)文字列が出力されます。この時の引数にはテンプレートに埋め込む値を配列で指定しますが、テンプレート上の {0} に値の 1 番目の要素、{1} に値の 2 番目の要素が埋め込まれます。

この { } の要素のことをフォーマット要素といい、テンプレートの文字列上に指定します。

フォーマット要素:
 { 添え字番号 }
 { 添え字番号 , フォーマットタイプ }
 { 添え字番号 , フォーマットタイプ , フォーマットスタイル }

フォーマットタイプ: 
        number
        date
        time
        choice

フォーマットスタイル:
        short
        medium
        long
        full
        integer
        currency
        percent
        SubformatPattern

 
今回の例では MessageFormat オブジェクトを生成し format() を実行していますが、format() は static なメソッドとしても定義されているため、そちらを利用することもできます。

また文字列以外にもテンプレートに埋め込み出力することができます。以下に文字列以外の例を紹介します。

サンプルコード

// 時刻情報を出力
Calendar c = Calendar.getInstance();
Date d = c.getTime();
System.out.println(MessageFormat.format("①日付({0,date})、時刻({0,time})", new Object[]{d}));
System.out.println(MessageFormat.format("②日付({0,date,yyyyMMdd})、時刻({0,time,HHmmss.SSS})", new Object[]{d}));

/******* プログラム実行結果 **********************************************************
 * ①日付(2009/09/12)、時刻(22:49:11)
 * ②日付(20090912)、時刻(224911.687)
**************************************************************************************/

 

MessageFormat
boolean MessageFormat (String pattern)
          指定されたパターンの MessageFormat を生成します。
static String format (String pattern, Object[] arguments)

          指定されたパターンを使って MessageFormat を作成し、それを使用して指定された引数をフォーマットします。

String format (Object[] arguments)
          オブジェクトをフォーマットして文字列を作成します。


One Response to “フォーマットパターン MessageFormat”

  1. Mateen より:

    We experience two types of reahniotslips at church:  God comes to us in His Word and Sacrament (divine relationship through earthly means), the relationships we have with members of church.  The first is God’s holy and perfection action to us, the second is our sinful action to one another.  We go to church not because it’s a social club for people like us instead it’s a hospital for sinners who need a Savior.Â

Leave a Reply

preload preload preload