Spec-Zone.ru › OpenJDK 24

Класс 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.

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

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

Примечание о реализации:
В эталонной реализации предел ArgumentIndex равен 10 000.
Показывает, как значения FormatType и FormatStyle сопоставляются с экземплярами Format
FormatType FormatStyle Созданный Subformat
(none) (none) null
number (none) 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 (none) 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 (none) 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 (none) 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) (none) The pre-defined DateTimeFormatter(s) are used as a 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 (none) 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 (none) 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 (none) 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, обрабатывается как специальная; вхождения '{' используются для указания подформатов и вызывают рекурсию. Если FormatElement определена в шаблоне ChoiceFormat, она будет отформатирована только в соответствии с шаблонами FormatType и FormatStyle. Сопутствующие подформаты верхнего уровня MessageFormat не будут применяться к FormatElement, определённому в шаблоне ChoiceFormat. Если вы создаёте как MessageFormat, так и ChoiceFormat программно (вместо использования строковых шаблонов), будьте осторожны, чтобы не создать формат, который вызывает рекурсию на себя, что приведёт к бесконечной петле.

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

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

1) дата FormatType с полным 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_дата FormatType с полным 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")}

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

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

Since:
1.1
См. также:
  • Locale
  • Format
  • NumberFormat
  • DecimalFormat
  • DecimalFormatSymbols
  • ChoiceFormat
  • DateFormat
  • SimpleDateFormat
  • DateTimeFormatter
  • Serialized Form

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

Модификатор и тип Класс Описание
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()
Возвращает строку-шаблон, соответствующую patterns section, которая представляет текущее состояние этого MessageFormat.
String toString()
Возвращает строку, идентифицирующую этот MessageFormat, для отладки.

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

format, parseObject

Методы, объявленные в классе java.lang.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.

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

getFormats

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

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

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

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, то будет возвращено местоположение первой отформатированной строки.

Parameters:
arguments - массив объектов, которые необходимо отформатировать и заменить.
result - место, куда добавляется текст.
pos - отслеживает позицию первого заменённого аргумента в строке вывода.
Returns:
переданный буфер строки result с добавленным отформатированным текстом
Throws:
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()
Parameters:
pattern - строка шаблона
arguments - объект(ы) для форматирования
Returns:
отформатированная строка
Throws:
IllegalArgumentException - если шаблон некорректен или аргумент в массиве arguments не соответствует типу, ожидаемому элементом(ами) формата, использующим его.
NullPointerException - если pattern равно null

format

public final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет шаблон MessageFormat, с элементами формата, заменёнными отформатированными объектами, в предоставленный буфер StringBuffer. Это эквивалентно
format((Object[]) arguments, result, pos)
Specified by:
format в классе Format
Parameters:
arguments - массив объектов, которые необходимо отформатировать и заменить.
result - место, куда добавляется текст.
pos - отслеживает позицию первого заменённого аргумента в строке вывода.
Returns:
переданный буфер строки toAppendTo с добавленным отформатированным текстом
Throws:
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. Это позволяет не только найти место расположения аргумента в результирующей строке, но и какие поля он содержит в свою очередь.

Overrides:
formatToCharacterIterator в классе Format
Parameters:
arguments - массив объектов, которые необходимо отформатировать и заменить.
Returns:
AttributedCharacterIterator, описывающий отформатированное значение.
Throws:
NullPointerException - если arguments равно null.
IllegalArgumentException - если аргумент в массиве arguments не соответствует типу, ожидаемому элементом(ами) формата, использующим его.
Since:
1.4

parse

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

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

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

parse

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

См. метод parse(String, ParsePosition) для получения дополнительной информации о парсинге сообщений.

Parameters:
source - A String, начало которой должно быть обработано.
Returns:
Массив Object, распарсенный из строки.
Throws:
ParseException - если начало указанной строки не может быть обработано.

parseObject

public Object parseObject(String source, ParsePosition pos)
Парсит текст из строки для получения массива объектов.

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

См. метод parse(String, ParsePosition) для получения дополнительной информации о парсинге сообщений.

Specified by:
parseObject in class Format
Parameters:
source - A String, часть которой должна быть распарсена.
pos - Объект ParsePosition с информацией об индексе и индексе ошибки, как описано выше.
Returns:
Массив Object, распарсенный из строки. В случае ошибки возвращает null.
Throws:
NullPointerException - если pos равно null.

clone

public Object clone()
Создаёт и возвращает копию этого объекта.
Overrides:
clone in class Format
Returns:
клонированный экземпляр.
See Also:
  • Cloneable

equals

public boolean equals(Object obj)
Сравнивает указанный объект с этим MessageFormat на равенство. Возвращает true, если объект также является MessageFormat и оба формата отформатируют любое значение одинаково.
Overrides:
equals in class Object
Implementation Requirements:
Этот метод выполняет проверку на равенство с понятием идентичности класса, основанной на getClass(), а не на instanceof. Поэтому в методах equals в подклассах ни один экземпляр этого класса не должен считаться равным экземпляру подкласса.
Parameters:
obj - объект для сравнения на равенство
Returns:
true, если указанный объект равен этому MessageFormat
See Also:
  • Object.equals(Object)

hashCode

public int hashCode()
Возвращает значение хэш-кода для этого MessageFormat.
Overrides:
hashCode in class Object
Implementation Requirements:
Этот метод вычисляет значение хэш-кода, используя значение, возвращаемое toPattern().
Returns:
значение хэш-кода для этого MessageFormat
See Also:
  • Object.hashCode()

toString

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/text/MessageFormat.html

Spec-Zone.ru

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