95

What is the difference between MessageFormat.format and String.format in JDK 1.5?

Ivo Mori
  • 2,177
  • 5
  • 24
  • 35
kedar kamthe
  • 8,048
  • 10
  • 34
  • 46

2 Answers2

117

Put simply, the main difference is in format string:

  1. MessageFormat.format() format string accepts argument positions (eg. {0}, {1}). Example:

    "This is year {0}!"

    The developer doesn't have to worry about argument types, because they are, most often, recognized and formated according to current Locale.

  2. String.format() format string accepts argument type specifiers (eg. %d for numbers, %s for strings). Example:

    "This is year %d!"

    String.format() generally gives you much more control over how the argument is displayed thanks to many options you can specify with the type specifier. For instance, format string "%-6.2f" specifies to display a left-aligned floating point number with min. width 6 chars and precision of 2 decimal places.

Just have a look at javadoc of both methods to find out more details.

Adam Dyga
  • 8,666
  • 4
  • 27
  • 35
35

String.format is just a shortcut to Formatter, this is a "printf-style" formatter. On the other side, MessageFormat uses a different formatting convention, as described in the linked documentation.

Use the first "for layout justification and alignment, common formats for numeric, string, and date/time data, and locale-specific output" and the second "to produce concatenated messages in language-neutral way".

Matthew Simoneau
  • 6,199
  • 6
  • 35
  • 46
lbalazscs
  • 17,474
  • 7
  • 42
  • 50
  • 1
    This does seem to be the recommended approach, but I'm still struggling to understand why. Both support positional arguments, and MessageFormat's lack of time zone support makes it considerably less appealing. – Greg Brown Dec 03 '19 at 19:54