【问题标题】:What is the difference between MessageFormat.format and String.format in JDK 1.5?JDK 1.5 中的 MessageFormat.format 和 String.format 有什么区别?
【发布时间】:2010-05-11 09:55:09
【问题描述】:

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

【问题讨论】:

    标签: java string-formatting messageformat


    【解决方案1】:

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

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

      "This is year {0}!"

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

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

      "This is year %d!"

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

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

    【讨论】:

    • 您可以在一定程度上控制 MessageFormat.format 中的格式,即:“{0,number,integer}”。
    • 格式化字符串也支持位置参数(例如,“%2$s”将第二个参数格式化为字符串)。
    【解决方案2】:

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

    第一个“用于布局对齐和对齐,数字、字符串和日期/时间数据的通用格式,以及特定于区域设置的输出”,第二个“用于生成连接的消息以语言中立的方式”

    【讨论】:

    • 这似乎是推荐的方法,但我仍在努力理解为什么。两者都支持位置参数,而 MessageFormat 缺乏时区支持使其吸引力大大降低。
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2014-11-24
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多