String.format - это просто ярлык для Formatter , это форматтер "printf-style". С другой стороны, MessageFormat использует другое соглашение о форматировании, как описано в связанной документации.
Используйте первый "для выравнивания и выравнивания макета, общие форматы для числовых, строковых данных и данных даты / времени, а также вывод для конкретной локали" и второй "для создания объединенных сообщений в не зависящий от языка способ ".