Java中的MessageFormat.format用法实例
MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息。
MessageFormat模式(主要部分):
FormatElement: {ArgumentIndex}:是从0开始的入参位置索引。 {ArgumentIndex,FormatType} {ArgumentIndex,FormatType,FormatStyle} FormatType::指定使用不同的Format子类对入参进行格式化处理。值范围如下: number:调用NumberFormat进行格式化 date:调用DateFormat进行格式化 time:调用DateFormat进行格式化 choice:调用ChoiceFormat进行格式化 FormatStyle::设置FormatType中使用的格式化样式。值范围如下: short medium long full integer currency percent SubformatPattern(子格式模式,形如#.##)
还以str为例,在这个字符串中:
1、{0}和{1,number,short}和{2,number,#.#};都属于FormatElement,0,1,2是ArgumentIndex。
2、{1,number,short}里面的number属于FormatType,short则属于FormatStyle。
3、{1,number,#.#}里面的#.#就属于子格式模式。
指定FormatType和FormatStyle是为了生成日期格式的值、不同精度的数字、百分比类型等等。
实例:
1、ArgumentIndex必须是非负整数,它的个数不只限于0到9这10个,它可以用0到9的数字组成,因此可以有好多个,如:
Stringmsg="{0}{1}{2}{3}{4}{5}{6}{7}{8}"; Object[]array=newObject[]{"A","B","C","D","E","F","G","H","I",}; Stringvalue=MessageFormat.format(msg,array); System.out.println(value); //输出:ABCDEFGHI
2、格式化字符串时,两个单引号才表示一个单引号,单个单引号会被省略,除非中文单引号不会被省略,如:
Stringvalue=MessageFormat.format("oh,{0}is'a'pig","ZhangSan"); System.out.println(value); //输出:oh,ZhangSanisapig
给字母a加上单引号,如:
Stringvalue=MessageFormat.format("oh,{0}is''a''pig","ZhangSan");
System.out.println(value); //输出:oh,ZhangSanis'a'pig