Spec-Zone.ru › OpenJDK 25

Класс MessageFormat

java.lang.Object
java.text.Format
java.text.MessageFormat
Все реализованные интерфейсы:
Serializable, Cloneable
public class MessageFormat extends Format
MessageFormat позволяет создавать объединённые сообщения нейтральным по отношению к языку способом. Используйте этот класс для создания сообщений, отображаемых конечным пользователям.

MessageFormat принимает набор объектов, форматирует их, а затем вставляет отформатированные строки в шаблон в соответствующие места.

Примечание: MessageFormat отличается от других классов Format тем, что объект MessageFormat создаётся с помощью одного из конструкторов (а не с помощью фабричного метода в стиле getInstance). Фабричные методы не нужны, поскольку сам MessageFormat не реализует поведение, зависящее от локали. Такое поведение определяется предоставленным шаблоном и подформатами, используемыми для вставляемых аргументов.

Шаблоны и их интерпретация

MessageFormat использует шаблоны следующего вида:
MessageFormatPattern:
        String
        MessageFormatPattern FormatElement String

FormatElement:
        { ArgumentIndex }
        { ArgumentIndex , FormatType }
        { ArgumentIndex , FormatType , FormatStyle }

FormatType:
        number
        dtf_date
        dtf_time
        dtf_datetime
        pre-defined DateTimeFormatter(s)
        date
        time
        choice
        list

FormatStyle:
        short
        medium
        long
        full
        integer
        currency
        percent
        compact_short
        compact_long
        or
        unit
        SubformatPattern

Значение ArgumentIndex — это неотрицательное целое число, записанное цифрами от '0' до '9', которое представляет собой индекс в массиве arguments, переданном методам format, или в результирующем массиве, возвращаемом методами parse.

Любой конструктор или метод, принимающий параметр-шаблон String, выбрасывает IllegalArgumentException, если шаблон содержит значение ArgumentIndex, равное или превышающее ограничение реализации.

Значения FormatType и FormatStyle используются для создания экземпляра Format для элемента формата. В следующей таблице показано, как значения сопоставляются с экземплярами Format. При передаче в applyPattern(String) регистр этих значений не учитывается. Комбинации, не указанные в таблице, недопустимы. SubformatPattern должен быть допустимой строкой шаблона для используемого подкласса Format.

Примечание по реализации:
В эталонной реализации ограничение ArgumentIndex составляет 10 000.
Shows how FormatType and FormatStyle values map to Format instances
Тип формата Стиль формата Создаваемый подформат
(нет) (нет) null
number (нет) NumberFormat.getInstance(getLocale())
integer NumberFormat.getIntegerInstance(getLocale())
currency NumberFormat.getCurrencyInstance(getLocale())
percent NumberFormat.getPercentInstance(getLocale())
compact_short NumberFormat.getCompactNumberInstance(getLocale(), NumberFormat.Style.SHORT)
compact_long NumberFormat.getCompactNumberInstance(getLocale(), NumberFormat.Style.LONG)
SubformatPattern new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(getLocale()))
dtf_date (нет) DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
dtf_time (нет) DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
dtf_datetime (нет) DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(getLocale())
short DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(getLocale())
medium DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(getLocale())
long DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(getLocale())
full DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(getLocale())
SubformatPattern DateTimeFormatter.ofPattern(subformatPattern, getLocale())
pre-defined DateTimeFormatter(s) (нет) Значения pre-defined DateTimeFormatter(s) используются в качестве FormatType: BASIC_ISO_DATE, ISO_LOCAL_DATE, ISO_OFFSET_DATE, ISO_DATE, ISO_LOCAL_TIME, ISO_OFFSET_TIME, ISO_TIME, ISO_LOCAL_DATE_TIME, ISO_OFFSET_DATE_TIME, ISO_ZONED_DATE_TIME, ISO_DATE_TIME, ISO_ORDINAL_DATE, ISO_WEEK_DATE, ISO_INSTANT, RFC_1123_DATE_TIME
date (нет) DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())
short DateFormat.getDateInstance(DateFormat.SHORT, getLocale())
medium DateFormat.getDateInstance(DateFormat.MEDIUM, getLocale())
long DateFormat.getDateInstance(DateFormat.LONG, getLocale())
full DateFormat.getDateInstance(DateFormat.FULL, getLocale())
SubformatPattern new SimpleDateFormat(subformatPattern, getLocale())
time (нет) DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())
short DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())
medium DateFormat.getTimeInstance(DateFormat.MEDIUM, getLocale())
long DateFormat.getTimeInstance(DateFormat.LONG, getLocale())
full DateFormat.getTimeInstance(DateFormat.FULL, getLocale())
SubformatPattern new SimpleDateFormat(subformatPattern, getLocale())
choice SubformatPattern new ChoiceFormat(subformatPattern)
list (нет) ListFormat.getInstance(getLocale(), ListFormat.Type.STANDARD, ListFormat.Style.FULL)
or ListFormat.getInstance(getLocale(), ListFormat.Type.OR, ListFormat.Style.FULL)
unit ListFormat.getInstance(getLocale(), ListFormat.Type.UNIT, ListFormat.Style.FULL)

Правила экранирования в шаблонах

Внутри String пару одинарных кавычек можно использовать для заключения в кавычки любых символов, кроме одинарных кавычек. Например, строка шаблона "'{0}'" представляет строку "{0}", а не FormatElement. Одна одинарная кавычка должна быть представлена двумя одинарными кавычками '' на протяжении всей String. Например, строка шаблона "'{''}'" интерпретируется как последовательность из '{ (начала экранирования и открывающей фигурной скобки), '' (одинарной кавычки) и }' (закрывающей фигурной скобки и конца экранирования), а не как '{' и '}' (экранированных открывающей и закрывающей фигурных скобок): она представляет строку "{'}", а не "{}".

SubformatPattern интерпретируется соответствующим подформатом, при этом применяются правила шаблонов, зависящие от подформата. Например, строка шаблона "{1,number,$'#',##}" (SubformatPattern с подчёркиванием) создаст числовой формат, в котором знак решётки заключён в кавычки, с результатом вроде "$#31,45". Подробности см. в документации соответствующего подкласса Format.

Любая незакрытая кавычка считается закрытой в конце заданного шаблона. Например, строка шаблона "'{0}" рассматривается как шаблон "'{0}'".

Все фигурные скобки в шаблоне, не заключённые в кавычки, должны быть сбалансированы. Например, "ab {0} de" и "ab '}' de" — допустимые шаблоны, а "ab {0'}' de", "ab } de" и "''{''" — нет.

Предупреждение:
Правила использования кавычек в шаблонах формата сообщений, к сожалению, оказались несколько запутанными. В частности, локализаторам не всегда очевидно, нужно ли удваивать одинарные кавычки. Обязательно сообщите локализаторам об этих правилах и укажите им (например, с помощью комментариев в исходных файлах пакетов ресурсов), какие строки будут обрабатываться MessageFormat. Обратите внимание, что в переведённых строках локализаторам может потребоваться использовать одинарные кавычки, даже если в исходном варианте их нет.

Информация об использовании

В следующем примере показано общее использование MessageFormat. В интернационализированных программах шаблон формата сообщения и другие статические строки, вероятно, будут получены из пакетов ресурсов.
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
    planet, new GregorianCalendar(2053, Calendar.JULY, 3, 12, 30).getTime(), event);
result возвращает следующее:
At 12:30:00 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.

Для более сложных шаблонов можно использовать ChoiceFormat вместе с MessageFormat, чтобы правильно формировать формы единственного и множественного числа:

MessageFormat msgFmt = new MessageFormat("The disk \"{0}\" contains {1,choice,0#no files|1#one file|1< {1,number,integer} files}.");
Object[] args = {"MyDisk", fileCount};
String result = msgFmt.format(args);
result с различными значениями fileCount возвращает следующее:
The disk "MyDisk" contains no files.
The disk "MyDisk" contains one file.
The disk "MyDisk" contains 1,273 files.

Примечания: Как видно из предыдущего фрагмента, строка, созданная ChoiceFormat в MessageFormat, обрабатывается особым образом: вхождения «{» используются для обозначения подформатов и вызывают рекурсивную обработку. Если в шаблоне ChoiceFormat определён FormatElement, он будет отформатирован только в соответствии с предоставленными шаблонами FormatType и FormatStyle. Связанные подформаты объекта MessageFormat верхнего уровня не будут применены к FormatElement, определённому в шаблоне ChoiceFormat. Если вы создаёте программно и MessageFormat, и ChoiceFormat (вместо использования строковых шаблонов), следите за тем, чтобы не создать формат, рекурсивно ссылающийся на себя, поскольку это приведёт к бесконечному циклу.

Форматирование даты и времени

MessageFormat предоставляет шаблоны, поддерживающие форматировщики даты и времени из пакетов java.time.format и java.text. Рассмотрим следующие три примера с датой 16.11.2023:

1) шаблон date FormatType с параметром full FormatStyle,

Object[] arg = {new GregorianCalendar(2023, Calendar.NOVEMBER, 16).getTime()};
var fmt = new MessageFormat("The date was {0,date,full}");
fmt.format(arg); // returns "The date was Thursday, November 16, 2023"

2) шаблон dtf_date FormatType с параметром full FormatStyle,

Object[] arg = {LocalDate.of(2023, 11, 16)};
var fmt = new MessageFormat("The date was {0,dtf_date,full}");
fmt.format(arg); // returns "The date was Thursday, November 16, 2023"

3) шаблон ISO_LOCAL_DATE FormatType,

Object[] arg = {LocalDate.of(2023, 11, 16)};
var fmt = new MessageFormat("The date was {0,ISO_LOCAL_DATE}");
fmt.format(arg); // returns "The date was 2023-11-16"

Разбор

Если один аргумент разбирается в строке более одного раза, последним результатом разбора будет последнее совпадение. Например:

MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
Object[] objs = {Double.valueOf(3.1415)};
String result = mf.format( objs );
// result now equals "3.14, 3.1"
objs = mf.parse(result, new ParsePosition(0));
// objs now equals {Double.valueOf(3.1)}

Аналогично, при разборе с помощью объекта MessageFormat с шаблонами, содержащими несколько вхождений одного аргумента, будет возвращено последнее совпадение. Например:

MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
String forParsing = "x, y, z";
Object[] objs = mf.parse(forParsing, new ParsePosition(0));
// objs now equals {new String("z")}

Синхронизация

Форматы сообщений не являются синхронизированными. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к одному формату, необходимо обеспечить внешнюю синхронизацию.

Появился в версии:
1.1
См. также:
  • Locale
  • Format
  • NumberFormat
  • DecimalFormat
  • DecimalFormatSymbols
  • ChoiceFormat
  • DateFormat
  • SimpleDateFormat
  • DateTimeFormatter
  • Сериализованная форма

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static class  MessageFormat.Field
Определяет константы, используемые в качестве ключей атрибутов в AttributedCharacterIterator, возвращаемом MessageFormat.formatToCharacterIterator.

Краткое описание конструкторов

Конструктор Описание
MessageFormat(String pattern)
Создаёт MessageFormat для указанной локали FORMAT по умолчанию и заданного шаблона.
MessageFormat(String pattern, Locale locale)
Создаёт MessageFormat для заданных локали и шаблона.

Краткое описание методов

Модификатор и тип Метод Описание
void applyPattern(String pattern)
Задаёт шаблон, используемый этим форматом сообщений.
Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Сравнивает заданный объект с этим MessageFormat на равенство.
final StringBuffer format(Object[] arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет шаблон MessageFormat, заменяя элементы формата отформатированными объектами, в предоставленный StringBuffer.
final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет шаблон MessageFormat, заменяя элементы формата отформатированными объектами, в предоставленный StringBuffer.
static String format(String pattern, Object... arguments)
Создаёт MessageFormat с заданным шаблоном и использует его для форматирования заданных аргументов.
AttributedCharacterIterator formatToCharacterIterator(Object arguments)
Форматирует массив объектов и вставляет их в шаблон MessageFormat, формируя AttributedCharacterIterator.
Format[] getFormats()
Возвращает форматы, используемые для элементов формата в ранее заданной строке шаблона.
Format[] getFormatsByArgumentIndex()
Возвращает форматы, используемые для значений, переданных методам format или возвращённых методами parse.
Locale getLocale()
Возвращает локаль, используемую при создании или сравнении подформатов.
int hashCode()
Возвращает значение хеш-кода для этого MessageFormat.
Object[] parse(String source)
Разбирает текст с начала заданной строки и формирует массив объектов.
Object[] parse(String source, ParsePosition pos)
Разбирает строку.
Object parseObject(String source, ParsePosition pos)
Разбирает текст из строки и формирует массив объектов.
void setFormat(int formatElementIndex, Format newFormat)
Задаёт формат, используемый для элемента формата с указанным индексом в ранее заданной строке шаблона.
void setFormatByArgumentIndex(int argumentIndex, Format newFormat)
Задаёт формат, используемый для элементов формата в ранее заданной строке шаблона, которым соответствует указанный индекс аргумента.
void setFormats(Format[] newFormats)
Задаёт форматы, используемые для элементов формата в ранее заданной строке шаблона.
void setFormatsByArgumentIndex(Format[] newFormats)
Задаёт форматы, используемые для значений, переданных методам format или возвращённых методами parse.
void setLocale(Locale locale)
Задаёт локаль, используемую при создании или сравнении подформатов.
String toPattern()
Возвращает строку шаблона String, соответствующую patterns section и представляющую текущее состояние этого MessageFormat.
String toString()
Возвращает строку, идентифицирующую этот MessageFormat, для отладки.

Методы, объявленные в классе Format

format, parseObject

Методы, объявленные в классе Object

finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

MessageFormat

public MessageFormat(String pattern)
Создает MessageFormat для указанной по умолчанию локали FORMAT и заданного шаблона. Конструктор сначала задает локаль, затем разбирает шаблон и создает список подформатов для содержащихся в нем элементов формата. Шаблоны и их интерпретация описаны в описании класса.
Параметры:
pattern — шаблон для этого формата сообщения
Исключения:
IllegalArgumentException — если шаблон недопустим
NullPointerException — если pattern равно null

MessageFormat

public MessageFormat(String pattern, Locale locale)
Создает MessageFormat для указанной локали и шаблона. Конструктор сначала задает локаль, затем разбирает шаблон и создает список подформатов для содержащихся в нем элементов формата. Шаблоны и их интерпретация описаны в описании класса.
Требования к реализации:
Реализация по умолчанию выбрасывает NullPointerException, если locale равно null либо при создании объекта MessageFormat, либо позже, когда метод format() вызывается экземпляром MessageFormat с нулевой локалью, а реализация использует подформат, зависящий от локали.
Параметры:
pattern — шаблон для этого формата сообщения
locale — локаль для этого формата сообщения
Исключения:
IllegalArgumentException — если шаблон недопустим
NullPointerException — если pattern равно null или locale равно null, а реализация использует подформат, зависящий от локали.
С момента:
1.4

Подробное описание методов

setLocale

public void setLocale(Locale locale)
Задает локаль, используемую при создании или сравнении подформатов. Это влияет на последующие вызовы
  • методов applyPattern и toPattern, если элементы формата указывают тип формата и поэтому подформаты создаются в методе applyPattern, а также
  • методов format и formatToCharacterIterator, если элементы формата не указывают тип формата и поэтому подформаты создаются в методах форматирования.
На уже созданные подформаты это не влияет.
Параметры:
locale — локаль, используемая при создании или сравнении подформатов

getLocale

public Locale getLocale()
Возвращает локаль, используемую при создании или сравнении подформатов.
Возвращает:
локаль, используемую при создании или сравнении подформатов

applyPattern

public void applyPattern(String pattern)
Задает шаблон для этого формата сообщения. Метод разбирает шаблон и создает список подформатов для содержащихся в нем элементов формата. Шаблоны и их интерпретация описаны в описании класса.
Параметры:
pattern — шаблон для этого формата сообщения
Исключения:
IllegalArgumentException — если шаблон недопустим
NullPointerException — если pattern равно null

toPattern

public String toPattern()
Возвращает строковый шаблон, соответствующий patterns section и отражающий текущее состояние этого MessageFormat. Строка создается на основе внутренних данных и поэтому не обязательно совпадает с ранее примененным шаблоном. Порядок сопоставления FormatStyle не гарантируется. То есть полученный FormatStyle может не быть эквивалентен соответствующему переданному стилю, если несколько стилей эквивалентны.
Требования к реализации:
Реализация в MessageFormat возвращает строку, которая при передаче конструктору MessageFormat() или методу applyPattern() создает экземпляр, семантически эквивалентный этому экземпляру. Если подформат невозможно преобразовать в строковый шаблон, FormatType и FormatStyle будут исключены из FormatElement.
Возвращает:
строковый шаблон, соответствующий patterns section и отражающий текущее состояние этого MessageFormat

setFormatsByArgumentIndex

public void setFormatsByArgumentIndex(Format[] newFormats)
Задает форматы, используемые для значений, передаваемых методам format или возвращаемых методами parse. Индексы элементов в newFormats соответствуют индексам аргументов, используемым в ранее заданной строке шаблона. Поэтому порядок форматов в newFormats соответствует порядку элементов в массиве arguments, передаваемом методам format, или массиве результатов, возвращаемом методами parse.

Если индекс аргумента используется более чем для одного элемента формата в строке шаблона, соответствующий новый формат применяется ко всем таким элементам формата. Если индекс аргумента не используется ни для одного элемента формата в строке шаблона, соответствующий новый формат игнорируется. Если форматов предоставлено меньше, чем требуется, заменяются только форматы для индексов аргументов, меньших newFormats.length.

Параметры:
newFormats — новые форматы
Исключения:
NullPointerException — если newFormats равно null
С момента:
1.4

setFormats

public void setFormats(Format[] newFormats)
Задает форматы для элементов формата в ранее заданной строке шаблона. Порядок форматов в newFormats соответствует порядку элементов формата в строке шаблона.

Если форматов предоставлено больше, чем требуется строке шаблона, остальные игнорируются. Если форматов предоставлено меньше, чем требуется, заменяются только первые newFormats.length форматов.

Поскольку при локализации порядок элементов формата в строке шаблона часто меняется, обычно лучше использовать метод setFormatsByArgumentIndex, который предполагает, что порядок форматов соответствует порядку элементов в массиве arguments, передаваемом методам format, или массиве результатов, возвращаемом методами parse.

Параметры:
newFormats — новые форматы
Исключения:
NullPointerException — если newFormats равно null

setFormatByArgumentIndex

public void setFormatByArgumentIndex(int argumentIndex, Format newFormat)
Задает формат для элементов формата в ранее заданной строке шаблона, использующих указанный индекс аргумента. Индекс аргумента является частью определения элемента формата и представляет индекс в массиве arguments, передаваемом методам format, или массиве результатов, возвращаемом методами parse.

Если индекс аргумента используется более чем для одного элемента формата в строке шаблона, новый формат применяется ко всем таким элементам формата. Если индекс аргумента не используется ни для одного элемента формата в строке шаблона, новый формат игнорируется.

Параметры:
argumentIndex — индекс аргумента, для которого следует использовать новый формат
newFormat — новый формат
С момента:
1.4

setFormat

public void setFormat(int formatElementIndex, Format newFormat)
Задает формат для элемента формата с указанным индексом в ранее заданной строке шаблона. Индекс элемента формата — это его порядковый номер, начиная с нуля, при подсчете от начала строки шаблона.

Поскольку при локализации порядок элементов формата в строке шаблона часто меняется, обычно лучше использовать метод setFormatByArgumentIndex, который обращается к элементам формата на основе указанного ими индекса аргумента.

Параметры:
formatElementIndex — индекс элемента формата в шаблоне
newFormat — формат для указанного элемента формата
Исключения:
ArrayIndexOutOfBoundsException — если formatElementIndex больше или равен количеству элементов формата в строке шаблона

getFormatsByArgumentIndex

public Format[] getFormatsByArgumentIndex()
Возвращает форматы, используемые для значений, передаваемых методам format или возвращаемых методами parse. Индексы элементов в возвращаемом массиве соответствуют индексам аргументов, используемым в ранее заданной строке шаблона. Поэтому порядок форматов в возвращаемом массиве соответствует порядку элементов в массиве arguments, передаваемом методам format, или массиве результатов, возвращаемом методами parse.

Если индекс аргумента используется более чем для одного элемента формата в строке шаблона, в массив возвращается формат, используемый для последнего такого элемента формата. Если индекс аргумента не используется ни для одного элемента формата в строке шаблона, в массив возвращается null.

Возвращает:
форматы, используемые для аргументов шаблона
С момента:
1.4

getFormats

public Format[] getFormats()
Возвращает форматы, используемые для элементов формата в ранее заданной строке шаблона. Порядок форматов в возвращаемом массиве соответствует порядку элементов формата в строке шаблона.

Поскольку при локализации порядок элементов формата в строке шаблона часто меняется, обычно лучше использовать метод getFormatsByArgumentIndex, который предполагает, что порядок форматов соответствует порядку элементов в массиве arguments, передаваемом методам format, или массиве результатов, возвращаемом методами parse.

Возвращает:
форматы, используемые для элементов формата в шаблоне

format

public final StringBuffer format(Object[] arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет шаблон MessageFormat, в котором элементы формата заменены форматированными объектами, в предоставленный StringBuffer.

Текст, подставляемый вместо отдельных элементов формата, определяется текущим подформатом элемента формата и элементом arguments с индексом аргумента, указанным для этого элемента формата, согласно первой подходящей строке следующей таблицы. Аргумент недоступен, если arguments равно null или содержит меньше элементов, чем argumentIndex+1.

Примеры подформата, аргумента и форматированного текста
Подформат Аргумент Форматированный текст
любой недоступен "{" + argumentIndex + "}"
null "null"
instanceof ChoiceFormat любой subformat.format(argument).indexOf('{') >= 0 ?
(new MessageFormat(subformat.format(argument), getLocale())).format(argument) : subformat.format(argument)
!= null любой subformat.format(argument)
null instanceof Number NumberFormat.getInstance(getLocale()).format(argument)
instanceof Date DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale()).format(argument)
instanceof String argument
любой argument.toString()

Если pos не равно null и указывает на Field.ARGUMENT, будет возвращено положение первой форматированной строки.

Параметры:
arguments — массив объектов для форматирования и подстановки.
result — место добавления текста.
pos — отслеживает положение первого замененного аргумента в выходной строке.
Возвращает:
переданный в качестве result строковый буфер с добавленным форматированным текстом
Исключения:
IllegalArgumentException — если аргумент в массиве arguments имеет тип, не ожидаемый элементом (элементами) формата, в котором он используется.
NullPointerException — если result равно null или локаль экземпляра MessageFormat, вызывающего этот метод, имеет значение null, а реализация использует подформат, зависящий от локали.

format

public static String format(String pattern, Object... arguments)
Создает MessageFormat с заданным шаблоном и использует его для форматирования заданных аргументов. Этот метод возвращает строку, равную строке, которую вернул бы вызов
(new MessageFormat(pattern)).format(arguments, new StringBuffer(), null).toString()
Параметры:
pattern — строка шаблона
arguments — объект или объекты для форматирования
Возвращает:
форматированную строку
Исключения:
IllegalArgumentException — если шаблон недопустим или аргумент в массиве arguments имеет тип, не ожидаемый элементом (элементами) формата, в котором он используется.
NullPointerException — если pattern равно null

format

public final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет шаблон MessageFormat, в котором элементы формата заменены форматированными объектами, в предоставленный StringBuffer. Это эквивалентно вызову
format((Object[]) arguments, result, pos)
Определено в:
format в классе Format
Параметры:
arguments — массив объектов для форматирования и подстановки.
result — место добавления текста.
pos — отслеживает положение первого замененного аргумента в выходной строке.
Возвращает:
переданный в качестве toAppendTo строковый буфер с добавленным форматированным текстом
Исключения:
IllegalArgumentException — если аргумент в массиве arguments имеет тип, не ожидаемый элементом (элементами) формата, в котором он используется.
NullPointerException — если result равно null или локаль экземпляра MessageFormat, вызывающего этот метод, имеет значение null, а реализация использует подформат, зависящий от локали.

formatToCharacterIterator

public AttributedCharacterIterator formatToCharacterIterator(Object arguments)
Форматирует массив объектов и вставляет их в шаблон MessageFormat, создавая AttributedCharacterIterator. Возвращенный AttributedCharacterIterator можно использовать для построения итоговой строки, а также для получения сведений о ней.

Текст возвращенного AttributedCharacterIterator совпадает с текстом, который вернул бы вызов

format(arguments, new StringBuffer(), null).toString()

Кроме того, AttributedCharacterIterator содержит как минимум атрибуты, указывающие, где был создан текст из аргумента массива arguments. Ключи этих атрибутов имеют тип MessageFormat.Field, а их значения — объекты Integer, указывающие индекс аргумента в массиве arguments, из которого был создан текст.

Атрибуты и значения базовых экземпляров Format, используемых MessageFormat, также будут помещены в результирующий AttributedCharacterIterator. Это позволяет не только определить, где находится аргумент в результирующей строке, но и узнать, какие поля он, в свою очередь, содержит.

Переопределяет:
formatToCharacterIterator в классе Format
Параметры:
arguments — массив объектов для форматирования и подстановки.
Возвращает:
AttributedCharacterIterator, описывающий форматированное значение.
Исключения:
NullPointerException — если arguments равно null.
IllegalArgumentException — если аргумент в массиве arguments имеет тип, не ожидаемый элементом (элементами) формата, в котором он используется.
С момента:
1.4

parse

public Object[] parse(String source, ParsePosition pos)
Разбирает строку.

Предупреждения: разбор может завершиться неудачей по ряду причин. Например:

  • Если один из аргументов не встречается в шаблоне.
  • Если формат аргумента теряет информацию, например при использовании формата выбора, когда большое число форматируется как "many".
  • Рекурсивный разбор пока не поддерживается (когда подставленные строки содержат ссылки вида {n}).
  • Совпадение (или правильное совпадение) находится не всегда, если какая-либо часть разбираемого текста неоднозначна. Например, если для аргументов-строк {"a,b", "c"} используется шаблон "{1},{2}", результатом форматирования будет "a,b,c". При разборе результата будет возвращено {"a", "b,c"}.
  • Если один аргумент разбирается в строке несколько раз, результатом будет последний разбор.
Если разбор завершается неудачей, используйте ParsePosition.getErrorIndex(), чтобы определить место ошибки в строке. Возвращаемый индекс ошибки — это начальное смещение подшаблонов, с которыми сравнивается строка. Например, если строка для разбора "AAA {0} BBB" сравнивается с шаблоном "AAD {0} BBB", индекс ошибки равен 0. При возникновении ошибки этот метод возвращает null. Если исходная строка равна null, возвращается пустой массив.
Параметры:
source — строка для разбора
pos — позиция разбора
Возвращает:
массив разобранных объектов
Исключения:
NullPointerException — если pos равно null для ненулевой строки source.

parse

public Object[] parse(String source) throws ParseException
Разбирает текст с начала заданной строки и создает массив объектов. Метод может использовать не весь текст заданной строки.

Дополнительные сведения о разборе сообщений см. в методе parse(String, ParsePosition).

Параметры:
source — String, начало которого следует разобрать.
Возвращает:
массив Object, полученный при разборе строки.
Исключения:
ParseException — если начало заданной строки невозможно разобрать.

parseObject

public Object parseObject(String source, ParsePosition pos)
Разбирает текст строки и создает массив объектов.

Метод пытается разобрать текст, начиная с индекса, заданного в pos. Если разбор выполняется успешно, индекс pos обновляется до позиции после последнего использованного символа (при разборе могут быть использованы не все символы до конца строки), и возвращается разобранный массив объектов. Обновленный pos можно использовать, чтобы указать начальную позицию для следующего вызова этого метода. При возникновении ошибки индекс pos не меняется, индекс ошибки pos устанавливается в позицию символа, на котором произошла ошибка, и возвращается null.

Дополнительные сведения о разборе сообщений см. в методе parse(String, ParsePosition).

Определено в:
parseObject в классе Format
Параметры:
source — String, часть которого следует разобрать.
pos — объект ParsePosition с индексом и сведениями об индексе ошибки, как описано выше.
Возвращает:
массив Object, полученный при разборе строки. В случае ошибки возвращается null.
Исключения:
NullPointerException — если pos равно null.

clone

public Object clone()
Создает и возвращает копию этого объекта.
Переопределяет:
clone в классе Format
Возвращает:
клон этого экземпляра.
См. также:
  • Cloneable

equals

public boolean equals(Object obj)
Сравнивает указанный объект с этим MessageFormat на равенство. Возвращает true, если объект также является MessageFormat и оба формата одинаково форматируют любое значение.
Переопределяет:
equals в классе Object
Требования к реализации:
Этот метод проверяет равенство, определяя идентичность класса на основе getClass(), а не instanceof. Поэтому в методах equals подклассов ни один экземпляр этого класса не должен считаться равным экземпляру подкласса.
Параметры:
obj — объект для сравнения на равенство
Возвращает:
true, если указанный объект равен этому MessageFormat
См. также:
  • Object.equals(Object)

hashCode

public int hashCode()
Возвращает хеш-код этого MessageFormat.
Переопределяет:
hashCode в классе Object
Требования к реализации:
Этот метод вычисляет хеш-код, используя значение, возвращаемое методом toPattern().
Возвращает:
хеш-код этого MessageFormat
См. также:
  • Object.hashCode()

toString

public String toString()
Возвращает строку, идентифицирующую этот MessageFormat, для отладки.
Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую этот MessageFormat, для отладки

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/text/MessageFormat.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API