多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # MessageFormat(动态文本) 如果一个字符串中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理。 例如: ~~~ At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage. ~~~ 以上字符串中包含了时间、数字、货币等多个与国际化相关的数据,对于这种字符串,可以使用MessageFormat类对其国际化相关的数据进行批量处理。 MessageFormat类如何进行批量处理呢? 1. MessageFormat类允许开发人员用占位符替换掉字符串中的敏感数据(即国际化相关的数据)。 2. MessageFormat类在格式化输出包含占位符的文本时,messageFormat类可以接收一个参数数组,以替换文本中的每一个占位符。 # 模式字符串与占位符 例如: ~~~ At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage. ~~~ 该语句对应的模式字符串即为: ~~~ At {0} on {1},a destroyed {2} houses and caused {3} of damage. ~~~ 字符串中的{0}、{1}、{2}、{3}就是占位符 # 格式化模式字符串 ~~~ At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage. ~~~ 该语句对应的模式字符串还可编写为: ~~~ On {0}, a hurricance destroyed {1} houses and caused {2} of damage. ~~~ 现在来格式化以上模式字符串。 1. 实例化MessageFormat对象,并装载相应的模式字符串。 2. 使用`format(object obj[])`格式化输出模式字符串,参数数组中指定占位符相应的替换对象 例子 ~~~ public static void main(String[] args) { // 模式字符串 String pattern = "On {0}, a hurricance destroyed {1} houses and caused {2} of damage."; // 实例化MessageFormat对象,并装载相应的模式字符串 MessageFormat format = new MessageFormat(pattern, Locale.CHINA); Object[] params = {new Date(), 99, 1000000}; // 格式化模式字符串,参数数组中指定占位符相应的替换对象 String message = format.format(params); System.out.println(message); } ~~~ 运行结果:`On 16-8-18 上午9:01, a hurricance destroyed 99 houses and caused 1,000,000 of damage.` 还可以将模式字符串编写在资源文件中,如下: ![](https://box.kancloud.cn/437eaedb2d39dda583eb30bfb6503f9e_847x81.png) ~~~ public static void main(String[] args) { ResourceBundle bundle = ResourceBundle.getBundle("cn.itcast.resource.MessageResource", Locale.CHINA); String pattern = bundle.getString("message"); MessageFormat format = new MessageFormat(pattern, Locale.CHINA); Object[] params = {new Date(), 99, 100000000}; String message = format.format(params); System.out.println(message); } ~~~ 运行结果为:在16-8-18 上午9:16,一场大风摧毁了99所房子,导致了100,000,000钱的损失!!!