|
Spec-Zone .ru
спецификации, руководства, описания, API
|
public class MessageFormat extends Format
MessageFormat обеспечивает средство произвести связанные сообщения нейтральным языком способом. Используйте это, чтобы создать сообщения, выведенные на экран для конечных пользователей.
MessageFormat берет ряд объектов, форматирует их, затем вставляет отформатированные строки в образец в соответствующих местах.
Отметьте:
MessageFormat отличается от другого Format классы в этом Вы создаете a MessageFormat объект с одним из его конструкторов (не с a getInstance метод фабрики стиля). Методы фабрики не необходимы потому что MessageFormat непосредственно не реализует локаль определенное поведение. Определенное поведение любой локали определяется образцом, который Вы обеспечиваете так же как подформаты, используемые для вставленных параметров.
MessageFormat образцы использования следующей формы:
MessageFormatPattern:
String
MessageFormatPattern FormatElement String
FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
FormatType: one of
number date time choice
FormatStyle:
short
medium
long
full
integer
currency
percent
SubformatPattern
В пределах Строки пара одинарных кавычек может использоваться, чтобы заключить любые произвольные символы в кавычки кроме одинарных кавычек. Например, строка образца "'{0}'" представляет строку "{0}", не FormatElement. Сама одинарная кавычка должна быть представлена удвоенными одинарными кавычками '' всюду по Строке. Например, строка образца "'{''}'" интерпретируется как последовательность '{ (запустите заключения в кавычки и левой изогнутой фигурной скобки), '' (одинарная кавычка), и }' (правильная изогнутая фигурная скобка и конец заключения в кавычки), нет '{' и '}' (заключенные в кавычки левые и правые изогнутые фигурные скобки): представление строки "{'}", нет "{}".
SubformatPattern интерпретируется его соответствующим подформатом, и зависимые от подформата правила образца применяются. Например, строка образца "{1,number,$'#',##}" (SubformatPattern с подчеркиванием), произведет числовой формат с заключенным в кавычки знаком фунта, с результатом, таким как: "$#31,45". Обратитесь к каждому Format документация подкласса для деталей.
Любая несогласованная кавычка обрабатывается как закрыто в конце данного образца. Например, строка образца "'{0}" обрабатывается как образец "'{0}'".
Должны быть сбалансированы любые изогнутые фигурные скобки в пределах неупомянутого образца. Например, "ab {0} de" и "ab '}' de" допустимые образцы, но "ab {0'}' de", "ab } de" и "''{''" не.
MessageFormat. Отметьте, что localizers, возможно, должен использовать одинарные кавычки в преобразованных строках, где у оригинальной версии нет их. Значение ArgumentIndex является неотрицательным целым числом, записанным, используя цифры '0' через '9', и представляет индексирование в arguments массив передал к format методы или массив результата, возвращенный parse методы.
Значения FormatType и FormatStyle используются, чтобы создать a Format экземпляр для элемента формата. Следующая таблица показывает, как значения отображаются на Format экземпляры. Комбинации, не показанные в таблице, недопустимы. SubformatPattern должен быть допустимой строкой образца для Format подкласс используется.
Вот некоторые примеры использования. В вещественном числе интернационализировавшие программы, образец формата сообщения и другие статические строки будут, конечно, получены из пакетов ресурса. Другие параметры будут динамически определены во времени выполнения.
Первый пример использует статический метод MessageFormat.format, который внутренне создает a 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 Date(), event);
Вывод: At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
Следующий пример создает a MessageFormat экземпляр, который может неоднократно использоваться:
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};
MessageFormat form = new MessageFormat(
"The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
Вывод с различными значениями для fileCount: The disk "MyDisk" contains 0 file(s). The disk "MyDisk" contains 1 file(s). The disk "MyDisk" contains 1,273 file(s).
Для более сложных образцов можно использовать a ChoiceFormat произвести корректные формы для исключительного и множественного:
MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
double[] filelimits = {0,1,2};
String[] filepart = {"no files","one file","{0,number} files"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
form.setFormatByArgumentIndex(0, fileform);
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};
System.out.println(form.format(testArgs));
Вывод с различными значениями для fileCount: The disk "MyDisk" contains no files. The disk "MyDisk" contains one file. The disk "MyDisk" contains 1,273 files.
Можно создать ChoiceFormat программно, как в вышеупомянутом примере, или при использовании образца. См. ChoiceFormat для получения дополнительной информации.
form.applyPattern(
"There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
Отметьте: Поскольку мы видим выше, строка, произведенная a ChoiceFormat в MessageFormat обрабатывается как особенный; возникновения' {' используются, чтобы указать на подформаты, и рекурсию причины. Если Вы создаете обоих a MessageFormat и ChoiceFormat программно (вместо того, чтобы использовать строковые образцы), затем бояться производить формат, который рекурсивно вызывает себя, который вызовет бесконечный цикл.
Когда единственный параметр будет проанализирован не раз в строке, последнее соответствие будет окончательным результатом парсинга. Например,
MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
Object[] objs = {new Double(3.1415)};
String result = mf.format( objs );
// result now equals "3.14, 3.1"
objs = null;
objs = mf.parse(result, new ParsePosition(0));
// objs now equals {new Double(3.1)}
Аналогично, парсинг с a MessageFormat объект используя образцы, содержащие многократные возникновения того же самого параметра, возвратил бы последнее соответствие. Например,
MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
String forParsing = "x, y, z";
Object[] objs = mf.parse(forParsing, new ParsePosition(0));
// result now equals {new String("z")}
Форматы сообщения не синхронизируются. Рекомендуется создать отдельные экземпляры формата для каждого потока. Если многократные потоки получают доступ к формату одновременно, он должен синхронизироваться внешне.
| Модификатор и Тип | Класс и Описание |
|---|---|
static class |
MessageFormat. Поле
Определяет константы, которые используются, поскольку атрибут вводит
AttributedCharacterIterator возвращенный из MessageFormat.formatToCharacterIterator. |
| Конструктор и Описание |
|---|
MessageFormat(String pattern)
Создает MessageFormat для значения по умолчанию
FORMAT локаль и указанный образец. |
MessageFormat(String pattern, Locale locale)
Создает MessageFormat для указанной локали и образца.
|
| Модификатор и Тип | Метод и Описание |
|---|---|
void |
applyPattern(String pattern)
Устанавливает образец, используемый этим форматом сообщения.
|
Объект |
clone()
Создает и возвращает копию этого объекта.
|
boolean |
equals(Object obj)
Сравнение равенства между двумя объектами формата сообщения
|
StringBuffer |
format(Object[] arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет
MessageFormat's образец, с элементами формата, замененными отформатированными объектами, к обеспеченному StringBuffer. |
StringBuffer |
format(Object arguments, StringBuffer result, FieldPosition pos)
Форматирует массив объектов и добавляет
MessageFormat's образец, с элементами формата, замененными отформатированными объектами, к обеспеченному StringBuffer. |
static String |
format(String pattern, Object... arguments)
Создает MessageFormat с данным образцом и использует это, чтобы отформатировать данные параметры.
|
AttributedCharacterIterator |
formatToCharacterIterator(Object arguments)
Форматирует массив объектов и вставляет их в
MessageFormat's образец, производя AttributedCharacterIterator. |
Формат[] |
getFormats()
Использовали форматы для элементов формата в ранее строка установленного образца.
|
Формат[] |
getFormatsByArgumentIndex()
Использовали форматы для значений, в которые передают
format методы или возвратились из parse методы. |
Локаль |
getLocale()
Получает локаль, это используется, создавая или сравнивая подформаты.
|
int |
hashCode()
Генерирует хэш-код для объекта формата сообщения.
|
Объект[] |
parse(String source)
Текст синтаксических анализов с начала данной строки произвести объектный массив.
|
Объект[] |
parse(String source, ParsePosition pos)
Анализирует строку.
|
Объект |
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)
Устанавливает локаль, которая будет использоваться, создавая или сравнивая подформаты.
|
Строка |
toPattern()
Возвращает образец, представляющий текущее состояние формата сообщения.
|
format, parseObjectpublic MessageFormat(String pattern)
FORMAT локаль и указанный образец. Конструктор первые наборы локаль, затем анализирует образец и создает список подформатов для элементов формата, содержавшихся в нем. Образцы и их интерпретация определяются в описании class.pattern - образец для этого формата сообщенияIllegalArgumentException - если образец недопустимpublic MessageFormat(String pattern, Locale locale)
pattern - образец для этого формата сообщенияlocale - локаль для этого формата сообщенияIllegalArgumentException - если образец недопустимpublic void setLocale(Locale locale)
applyPattern и toPattern методы, если элементы формата определяют тип формата и поэтому создали подформаты в applyPattern метод, так же как format и formatToCharacterIterator методы, если элементы формата не определяют тип формата и поэтому создавать подформаты в методах форматирования. locale - локаль, которая будет использоваться, создавая или сравнивая подформатыpublic Locale getLocale()
public void applyPattern(String pattern)
pattern - образец для этого формата сообщенияIllegalArgumentException - если образец недопустимpublic String toPattern()
public void setFormatsByArgumentIndex(Format[] newFormats)
format методы или возвратились из parse методы. Индексы элементов в newFormats соответствуйте индексам параметра, используемым в ранее строка установленного образца. Порядок форматов в newFormats таким образом соответствует порядку элементов в arguments массив передал к format методы или массив результата, возвращенный parse методы. Если параметр индексирует, используется больше чем для одного элемента формата в строке образца, то соответствующий новый формат используется для всех таких элементов формата. Если параметр индексирует, не используется ни для какого элемента формата в строке образца, то соответствующий новый формат игнорируется. Если меньше форматов обеспечивается чем необходимый, то только форматы для индексов параметра меньше чем newFormats.length заменяются.
newFormats - новые форматы, чтобы использоватьNullPointerException - если newFormats нульpublic void setFormats(Format[] newFormats)
newFormats соответствует порядку элементов формата в строке образца. Если больше форматов обеспечивается чем необходимый строкой образца, остающиеся игнорируются. Если меньше форматов обеспечивается чем необходимый, то только первое newFormats.length форматы заменяются.
Так как порядок элементов формата в строке образца часто изменяется во время локализации, обычно лучше использовать setFormatsByArgumentIndex метод, который принимает порядок форматов, соответствующих порядку элементов в arguments массив передал к format методы или массив результата, возвращенный parse методы.
newFormats - новые форматы, чтобы использоватьNullPointerException - если newFormats нульpublic void setFormatByArgumentIndex(int argumentIndex,
Format newFormat)
arguments массив передал к format методы или массив результата, возвращенный parse методы. Если параметр индексирует, используется больше чем для одного элемента формата в строке образца, то новый формат используется для всех таких элементов формата. Если параметр индексирует, не используется ни для какого элемента формата в строке образца, то новый формат игнорируется.
argumentIndex - параметр индексирует, для которого можно использовать новый форматnewFormat - новый формат, чтобы использоватьpublic void setFormat(int formatElementIndex,
Format newFormat)
Так как порядок элементов формата в строке образца часто изменяется во время локализации, обычно лучше использовать setFormatByArgumentIndex метод, какие доступы форматируют элементы, основанные на параметре, индексирует, они определяют.
formatElementIndex - индексирование элемента формата в пределах образцаnewFormat - формат, чтобы использовать для указанного элемента форматаArrayIndexOutOfBoundsException - если formatElementIndex равно или больше чем число элементов формата в строке образцаpublic Format[] getFormatsByArgumentIndex()
format методы или возвратились из parse методы. Индексы элементов в возвращенном массиве соответствуют индексам параметра, используемым в ранее строка установленного образца. Порядок форматов в возвращенном массиве таким образом соответствует порядку элементов в arguments массив передал к format методы или массив результата, возвращенный parse методы. Если параметр индексирует, используется больше чем для одного элемента формата в строке образца, то формат, используемый для последнего такой элемент формата, возвращается в массиве. Если параметр индексирует, не используется ни для какого элемента формата в строке образца, то нуль возвращается в массиве.
public Format[] getFormats()
Так как порядок элементов формата в строке образца часто изменяется во время локализации, обычно лучше использовать getFormatsByArgumentIndex метод, который принимает порядок форматов, соответствующих порядку элементов в arguments массив передал к format методы или массив результата, возвращенный parse методы.
public final StringBuffer format(Object[] arguments, StringBuffer result, FieldPosition pos)
MessageFormat's образец, с элементами формата, замененными отформатированными объектами, к обеспеченному StringBuffer. Текст, которым заменяют отдельные элементы формата, получается из текущего подформата элемента формата и arguments элемент в параметре элемента формата индексирует как обозначено первой строкой соответствия следующей таблицы. Параметр недоступен если arguments null или имеет меньше чем argumentIndex+1 элементы.
| Подформат | Параметр | Отформатированный текст |
|---|---|---|
| любой | недоступный | "{" + argumentIndex + "}"
|
| любой | null
| "null"
|
instanceof ChoiceFormat
| любой | subformat.format(argument).indexOf('{') >= 0 ?
|
!= null
| любой | subformat.format(argument)
|
null
| instanceof Number
| NumberFormat.getInstance(getLocale()).format(argument)
|
null
| instanceof Date
| DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale()).format(argument)
|
null
| instanceof String
| argument
|
null
| любой | argument.toString()
|
Если pos ненуль, и обращается к Field.ARGUMENT, расположение первой отформатированной строки будет возвращено.
arguments - массив объектов, которые будут отформатированы и заменены.result - где текст добавляется.pos - На вводе: поле выравнивания, при желании. На выводе: смещения поля выравнивания.IllegalArgumentException - если параметр в arguments массив не имеет типа, ожидаемого элементом (ами) формата, которые используют это.public static String format(String pattern, Object... arguments)
(new MessageFormat(pattern)).format(arguments, new StringBuffer(), null).toString()
IllegalArgumentException - если образец недопустим, или если параметр в arguments массив не имеет типа, ожидаемого элементом (ами) формата, которые используют это.public final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)
MessageFormat's образец, с элементами формата, замененными отформатированными объектами, к обеспеченному StringBuffer. Это эквивалентно
format((Object[]) arguments, result, pos)
format в class Formatarguments - массив объектов, которые будут отформатированы и заменены.result - где текст добавляется.pos - На вводе: поле выравнивания, при желании. На выводе: смещения поля выравнивания.toAppendTo, с отформатированным добавленным текстомIllegalArgumentException - если параметр в arguments массив не имеет типа, ожидаемого элементом (ами) формата, которые используют это.public AttributedCharacterIterator formatToCharacterIterator(Object arguments)
MessageFormat's образец, производя AttributedCharacterIterator. Можно использовать возвращенный AttributedCharacterIterator создать получающуюся Строку, так же как определить информацию о получающейся Строке. Текст возвращенного AttributedCharacterIterator то же самое, которое было бы возвращено
format(arguments, new StringBuffer(), null).toString()
Кроме того, AttributedCharacterIterator содержит, по крайней мере, атрибуты, указывающие, где текст был сгенерирован от параметра в arguments массив. Ключи этих атрибутов имеют тип MessageFormat.Field, их значения Integer объекты, указывающие на индексирование в arguments массив параметра, от которого был сгенерирован текст.
Атрибуты/значение от базового Format экземпляры это MessageFormat использование будет также помещено в получающееся AttributedCharacterIterator. Это позволяет, Вы к не только находите, куда параметр помещается в получающуюся Строку, но также и какие поля это содержит поочередно.
formatToCharacterIterator в class Formatarguments - массив объектов, которые будут отформатированы и заменены.NullPointerException - если arguments нуль.IllegalArgumentException - если параметр в arguments массив не имеет типа, ожидаемого элементом (ами) формата, которые используют это.public Object[] parse(String source, ParsePosition pos)
Протесты: синтаксический анализ может перестать работать при многих обстоятельствах. Например:
public Object[] parse(String source) throws ParseException
См. parse(String, ParsePosition) метод для получения дополнительной информации о парсинге сообщения.
source - A String чье начало должно быть проанализировано.Object массив проанализирован от строки.ParseException - если начало указанной строки не может быть проанализировано.public Object parseObject(String source, ParsePosition pos)
Метод пытается проанализировать текст, запускающийся при индексировании данного pos. Если парсинг успешно выполняется, то индексирование pos обновляется к индексированию после используемого последнего знака (парсинг не обязательно израсходовал все символы до конца строки), и проанализированный объектный массив возвращается. Обновленный pos может использоваться, чтобы указать на начальную точку для следующего звонка в этот метод. Если ошибка происходит, то индексирование pos не изменяется, ошибка индексируют pos устанавливается в индексирование символа, где ошибка произошла, и нуль возвращается.
См. parse(String, ParsePosition) метод для получения дополнительной информации о парсинге сообщения.
parseObject в class Formatsource - A String, часть которого должна быть проанализирована.pos - A ParsePosition объект с индексирует, и ошибка индексируют информацию как описано выше.Object массив проанализирован от строки. В случае ошибки, нуля возвратов.NullPointerException - если pos нуль.public Object clone()
public boolean equals(Object obj)
equals в class Objectobj - ссылочный объект, с которым можно сравниться.true если этот объект является тем же самым как obj параметром; false иначе.Object.hashCode(), HashMappublic int hashCode()
hashCode в class ObjectObject.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92