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


Answers:


86

简而言之,主要区别在于格式字符串:

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

    "This is year {0}!"

    开发人员不必担心参数类型,因为它们通常根据current被识别和格式化Locale

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

    "This is year %d!"

    String.format()由于可以使用类型说明符指定许多选项,因此通常可以使您更好地控制参数的显示方式。例如,格式字符串"%-6.2f"指定显示带有最小值的左对齐浮点数。宽度为6个字符,精度为2个小数位。

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


8
但是,您可以对MessageFormat.format中的格式进行一些控制,即:“ {0,number,integer}”。
Pieter De Bie

格式字符串还支持位置参数(例如,“%2 $ s”将第二个参数格式设置为字符串)。
格雷格·布朗

27

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

使用第一个“用于布局调整和对齐,用于数字,字符串和日期/时间数据的通用格式以及特定于语言环境的输出”,第二个“使用以语言无关的方式生成级联的消息”


这似乎是推荐的方法,但是我仍在努力理解原因。两者都支持位置参数,并且MessageFormat缺少时区支持,这使其吸引力大大降低。
格雷格·布朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.