Spec-Zone.ru › OpenJDK 27

Класс 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
Тип формата Стиль формата Создаваемый подформат
(нет) (нет) 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) 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) FormatType dtf_date с 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) FormatType ISO_LOCAL_DATE,

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

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

format, parseObject
Модификатор и тип Метод Описание
final String format(Object obj)
Форматирует объект, создавая строку.
Object parseObject(String source)
Разбирает текст с начала указанной строки, чтобы создать объект.

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

finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected void finalize()
Устарело, планируется удаление: этот элемент API будет удален в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать до пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать до пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать до пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

MessageFormat

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

MessageFormat

public MessageFormat(String pattern, Locale locale)
Создает MessageFormat для указанной локали и шаблона. Сначала конструктор задает локаль, затем анализирует шаблон и создает список подформатов для содержащихся в нем элементов формата. Шаблоны и их интерпретация описаны в описании класса.
Требования к реализации:
Реализация по умолчанию выбрасывает NullPointerException, если locale равно null либо во время создания объекта MessageFormat, либо позже, когда экземпляр MessageFormat вызывает format() с нулевой локалью, а реализация использует подформат, зависящий от локали.
Параметры:
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)
Форматирует массив объектов и добавляет в переданный StringBuffer шаблон MessageFormat, заменяя элементы формата отформатированными объектами.

Текст, подставляемый вместо отдельных элементов формата, определяется текущим подформатом элемента формата и элементом arguments с индексом аргумента этого элемента формата, как указано в первой подходящей строке следующей таблицы. Аргумент считается недоступным, если arguments равно null или содержит меньше чем аргументIndex+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)
Форматирует массив объектов и добавляет в переданный StringBuffer шаблон MessageFormat, заменяя элементы формата отформатированными объектами. Эквивалентно
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)
Разбирает строку.

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

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

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, 2026, 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.

Spec-Zone.ru

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