概要 †
- static String java.text.MessageFormat?#format( String pattern , Object[] arguments )
で、フォーマット付きメッセージを処理することができる。
pattern ::= <Element>*
Element ::= <StringLiteral> | <FormatElement>
StringLiteral ::= [^[{]]*
FormatElement ::= { [0-9] <Fromat>? }
Format ::= ,number
| ,number,###.### #整数桁数と小数桁数を指定
| ,number,integer
| ,number,currency
| ,number,percent
| ,date
| ,date,short
| ,date,medium
| ,date,long
| ,date,full
| ,time
| ,time,short
| ,time,medium
| ,time,long
| ,time,full
| ,choice <ChoiceElement>+
ChoiceElement ::= [,|\|] # 最初は","、二つ目以降は"|"
[0-9]+ [#|>|<] # 表示条件 (#はequal)
<Element>* # 表示するメッセージ
- argumentsがObject[]なのが少し使いにくい
- MessageFormat?オブジェクトは、パターンを保持して使い回すことができるが、同期化されないので、使い捨て(Staticメソッドのformat()を使う)が無難
- MessageFormat?クラスは、文字列をparse()することができるが、java.util.reges や Perl5Utilを使った方が無難か
プログラム例 †
public class MessageFormatExample {
public static void main(final String[] args) {
// JAPAN Localeのとき
System.out.println("★★★★★★ Local.JAPAN ★★★★★★");
Locale.setDefault(Locale.JAPAN);
System.out.println(getNumberMessage());
System.out.println(getDateMessage());
System.out.println(getTimeMessage());
// US Localeのとき
System.out.println("★★★★★★ Local.US ★★★★★★");
Locale.setDefault(Locale.US);
System.out.println(getNumberMessage());
System.out.println(getDateMessage());
System.out.println(getTimeMessage());
// Choice
System.out.println("★★★★★★ Choice Format ★★★★★★");
System.out.println(choiceMessage());
}
private static String getDateMessage() {
StringBuffer pattern = new StringBuffer();
pattern.append("書式無し \t{0}\n");
pattern.append("date \t{1,date}\n");
pattern.append("date,short \t{2,date,short}\n");
pattern.append("date,medium \t{3,date,medium}\n");
pattern.append("date,long \t{4,date,long}\n");
pattern.append("date,full \t{5,date,full}\n");
final Object TODAY = new Date();
final Object[] arguments = { TODAY, TODAY, TODAY, TODAY, TODAY, TODAY };
return MessageFormat.format(pattern.toString(), arguments);
}
private static String getNumberMessage() {
StringBuffer pattern = new StringBuffer();
pattern.append("書式指定無し \t{0}\n");
pattern.append("number \t{1,number}\n");
pattern.append("number,#.###### \t{2,number,#.########}\n");
pattern.append("number,integer \t{3,number,integer}\n");
pattern.append("number,currency \t{4,number,currency}\n");
pattern.append("number,percent \t{5,number,percent}\n");
Object PI = new Double(Math.PI);
Object[] arguments = { PI, PI, PI, PI, PI, PI };
return MessageFormat.format(pattern.toString(), arguments);
}
private static String getTimeMessage() {
StringBuffer pattern = new StringBuffer();
pattern.append("書式無し \t{0}\n");
pattern.append("time \t{1,time}\n");
pattern.append("time,short \t{2,time,short}\n");
pattern.append("time,medium \t{3,time,medium}\n");
pattern.append("time,long \t{4,time,long}\n");
pattern.append("time,full \t{5,time,full}\n");
final Object TODAY = new Date();
final Object[] arguments = { TODAY, TODAY, TODAY, TODAY, TODAY, TODAY };
return MessageFormat.format(pattern.toString(), arguments);
}
private static String choiceMessage() {
StringBuffer pattern = new StringBuffer();
pattern.append("りんごが{0,choice,0#ありません|1#ひとつ|1<{0}こ|100<たくさん}\n");
pattern.append("りんごが{1,choice,0#ありません|1#ひとつ|1<{1}こ|100<たくさん}\n");
pattern.append("りんごが{2,choice,0#ありません|1#ひとつ|1<{2}こ|100<たくさん}\n");
pattern.append("りんごが{3,choice,0#ありません|1#ひとつ|1<{3}こ|100<たくさん}\n");
pattern.append("りんごが{4,choice,0#ありません|1#ひとつ|1<{4}こ|100<たくさん}\n");
final Object[] arguments = { new Integer(0) ,
new Integer(1) ,
new Integer(10) ,
new Integer(100) ,
new Integer(1000) };
return MessageFormat.format(pattern.toString(), arguments);
}
}
実行結果 †
★★★★★★ Local.JAPAN ★★★★★★
書式指定無し 3.142
number 3.142
number,#.###### 3.14159265
number,integer 3
number,currency ¥3
number,percent 314%
書式無し 04/12/28 9:17
date 2004/12/28
date,short 04/12/28
date,medium 2004/12/28
date,long 2004/12/28
date,full 2004年12月28日 (火曜日)
書式無し 04/12/28 9:17
time 9:17:36
time,short 9:17
time,medium 9:17:36
time,long 9:17:36 JST
time,full 9時17分36秒 JST
★★★★★★ Local.US ★★★★★★
書式指定無し 3.142
number 3.142
number,#.###### 3.14159265
number,integer 3
number,currency $3.14
number,percent 314%
書式無し 12/28/04 9:17 AM
date Dec 28, 2004
date,short 12/28/04
date,medium Dec 28, 2004
date,long December 28, 2004
date,full Tuesday, December 28, 2004
書式無し 12/28/04 9:17 AM
time 9:17:36 AM
time,short 9:17 AM
time,medium 9:17:36 AM
time,long 9:17:36 AM JST
time,full 9:17:36 AM JST
★★★★★★ Choice Format ★★★★★★
りんごがありません
りんごがひとつ
りんごが10こ
りんごが100こ
りんごがたくさん
Java#JavaSE