Was ist der Unterschied zwischen MessageFormat.format und String.format in JDK 1.5?

Antworten:

86

Einfach ausgedrückt liegt der Hauptunterschied in der Formatzeichenfolge:

  1. MessageFormat.format()Format - String - Argument nimmt Positionen (zB. {0}, {1}). Beispiel:

    "This is year {0}!"

    Der Entwickler muss sich nicht um Argumenttypen kümmern, da diese meistens nach dem aktuellen Stand erkannt und formatiert werden Locale.

  2. String.format()format string akzeptiert Argumenttypbezeichner (z. B. %dfür Zahlen, %sfür Zeichenfolgen). Beispiel:

    "This is year %d!"

    String.format()Im Allgemeinen haben Sie dank vieler Optionen, die Sie mit dem Typbezeichner angeben können, viel mehr Kontrolle darüber, wie das Argument angezeigt wird. Beispielsweise "%-6.2f"gibt die Formatzeichenfolge an, dass eine linksbündige Gleitkommazahl mit min angezeigt werden soll. Breite 6 Zeichen und Genauigkeit von 2 Dezimalstellen.

Schauen Sie sich einfach javadoc beider Methoden an, um mehr Details zu erfahren.

Adam Dyga
quelle
8
Sie haben jedoch etwas Kontrolle über die Formatierung in MessageFormat.format, dh: "{0, number, integer}".
Pieter De Bie
Formatzeichenfolgen unterstützen auch Positionsargumente (z. B. "% 2 $ s" formatiert das zweite Argument als Zeichenfolge).
Greg Brown
27

String.format ist nur eine Verknüpfung zu Formatter . Dies ist ein Formatierer im "printf-Stil". Auf der anderen Seite verwendet MessageFormat eine andere Formatierungskonvention, wie in der verknüpften Dokumentation beschrieben.

Verwenden Sie das erste "zur Ausrichtung und Ausrichtung des Layouts, allgemeine Formate für numerische Daten, Zeichenfolgen und Datums- / Zeitdaten sowie die länderspezifische Ausgabe" und das zweite "zur Erzeugung verketteter Nachrichten auf sprachneutrale Weise" .

lbalazscs
quelle
Dies scheint der empfohlene Ansatz zu sein, aber ich habe immer noch Schwierigkeiten zu verstehen, warum. Beide unterstützen Positionsargumente, und MessageFormats mangelnde Zeitzonenunterstützung macht es erheblich weniger attraktiv.
Greg Brown