以下仅是我自己的看法
关于MessageFormat的详细解释可以查看源码
String.formt()主要可以用于格式化字符串以及占位
MessageFormat.format()主要用于占位,是个字符模板
关于两者的区别没有仔细研究,个人感觉MessageFormat是一个专门的字符模板。
首先:MessageFormat类只有一个静态方法MessageFormat.format(String pattern, Object... arguments),当然也可以自己实例化一个进行自己定义。
第一个参数一般填写MessageFormat提供好的格式,第二个参数是一个可变数组,填写将要放置到原先占位的值
MessageFormat提供的格式有三种:
1、 { <i>ArgumentIndex</i> }
2、 { <i>ArgumentIndex</i> , <i>FormatType</i> }
3、 { <i>ArgumentIndex</i> , <i>FormatType</i> , <i>FormatStyle</i> }
第一个参数是索引,目的是在同一句话中达到多处占位,第二个参数是类型,用于解释将要被占位内容进行类型限制 ,第三个参数是样式,用于对内容的格式进行限制
//===================================
第二个参数有以下可选类型
java.util.Locale
Format
NumberFormat
DecimalFormat
DecimalFormatSymbols
ChoiceFormat
DateFormat
SimpleDateFormat
部分具体参数有:
number
currency
percent
integer
choice
date
time
//==================================这地方有点没理解清楚
下面是部分内容解释:
1、用 { 表示开始 , 用 } 表示结束
2、数字代表索引,从0开始,此解释仅代表第一个参数
3、0代表数值,若没有则以0表示
4、#代表数值
5、.代表限制符 一般和0以及#合用
6、半角单引号'代表后面的正则表达式忽略 ,进行原样输出 ,倘若有两个则中间的内容忽略,进行原样输出 ,多个单引号则依此规则
注意事项:
1、不要单独使用左大括号{ ,会出异常。如果要显示可以用‘来进行过滤
2、模板格式要正确
下面是举例说明
String ms = MessageFormat.format("{0,number,#.##}", 3.656);
若格式不匹配则报异常 如第二个参数限制为数值 但内容为 String