JDK 1.5中,MessageFormat.format和String.format有什么区别?

97
在JDK 1.5中,MessageFormat.formatString.format之间有什么区别?
2个回答

120

简单来说,两者的主要区别在于格式化字符串:

  1. MessageFormat.format() 格式化字符串接受参数位置(例如 {0}{1})。示例:

    "今年是 {0}!"

    开发人员不必担心参数类型,因为它们通常会根据当前的 Locale 进行识别和格式化。

  2. String.format() 格式化字符串接受参数类型说明符(例如 %d 表示数字,%s 表示字符串)。示例:

    "今年是 %d!"

    String.format() 通常可以通过很多选项来指定参数的显示方式,因此可以更好地控制参数的显示。例如,格式化字符串 "%-6.2f" 指定要显示一个左对齐的浮点数,最小宽度为6个字符,精度为2位小数。

只需查看这两种方法的 javadoc,以了解更多详细信息。


11
在MessageFormat.format中,您可以在一定程度上控制格式,例如:"{0,number,integer}"。 - Pieter De Bie
3
格式化字符串还支持位置参数(例如,"%2$s" 将第二个参数格式化为字符串)。 - Greg Brown

35

String.format只是一个快捷方式,用于格式化程序,这是一种“printf风格”的格式化程序。另一方面,MessageFormat使用不同的格式约定,如链接文档中所述。

使用第一个"用于布局对齐和对齐,数字、字符串和日期/时间数据的常见格式以及特定于语言环境的输出"和第二个"以语言中立的方式生成连接消息"。


1
这似乎是推荐的方法,但我仍然很难理解为什么。两者都支持位置参数,而MessageFormat缺乏时区支持使其相对不太吸引人。 - Greg Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接