MessageFormat

  • 2019-03-25
  • 浏览 (373)

一、MessageFormat 简介
MessageFormat 很强大,不用管传入值是字符串还是数字,使用占位符即可。如

String format = "你好,{0},欢迎再次光临{1}!今天是你第{2}次进入。";
String str = MessageFormat.format(format, "小东", "博客园", 5);
System.out.println(str);

打印出来的字符串就是”你好,小东,欢迎再次光临博客园!今天是你第5次进入。“。

二、静态方法 java.text.MessageFormat.format              

  方法定义:

String MessageFormat.format(String fmt, Object...args)

  入参fmt为MessageFormat模式参数。

三、MessageFormat模式

  格式:  ArgumentIndex[,FormatType[,FormatStyle]]

  ArgumentIndex ,是从0开始的入参位置索引。

  FormatType ,指定使用不同的Format子类对入参进行格式化处理。值范围如下:

     number:调用NumberFormat进行格式化

     date:调用DateFormat进行格式化

     time:调用DateFormat进行格式化

     choice:调用ChoiceFormat进行格式化

  FormatType ,设置FormatType中使用的格式化样式。值范围如下:

    short,medium,long,full,integer,currency,percent,SubformPattern(子格式模式,形如#.##)

  注意: FormatType 和 FormatStyle 主要用于对日期时间、数字、百分比等进行格式化。

  示例——将数字1.23格式为1.2:

double num = 1.23;
String str = MessageFormat.format("{0,number,#.#}", num);

四、MessageFormat注意点

  1. 两个单引号才表示一个单引号,仅写一个单引号将被忽略。

  2. 单引号会使其后面的占位符均失效,导致直接输出占位符。

MessageFormat.format("{0}{1}", 1, 2); // 结果12
MessageFormat.format("'{0}{1}", 1, 2); // 结果{0}{1}
MessageFormat.format("'{0}'{1}", 1, 2); // 结果{0}

因此可以用于输出左花括号(单写左花括号会报错,而单写右花括号将正常输出)

MessageFormat.format("'{'{0}}", 2); // 结果{2

因此前言中的示例应该写为

{0}, this is {1}''s cat.{1},this is {0}''s dog.

五、类层级关系

                                        |-- java.text.MessageFormat

顶层抽象类java.text.Format—|            |--java.text.ChoiceFormat

                                        |--java.text.NumberFormat—|

                                        |      |--java.text.DecimalFormat

                                        |

                                        |--java.text.DateFormat—java.text.SimpleDateFormat
正文到此结束