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

- 2,177
- 5
- 24
- 35

- 8,048
- 10
- 34
- 46
2 Answers
Put simply, the main difference is in format string:
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
.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.

- 8,666
- 4
- 27
- 35
-
11You have somewhat control over formatting in MessageFormat.format though, ie: "{0,number,integer}". – Pieter De Bie Mar 03 '17 at 14:47
-
3Format strings also support positional arguments (e.g. "%2$s" formats the second argument as a string). – Greg Brown Dec 03 '19 at 19:52
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".

- 6,199
- 6
- 35
- 46

- 17,474
- 7
- 42
- 50
-
1This 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