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 для локали по умолчанию и указанного образца.
|
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, parseObject
public MessageFormat(String pattern)
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
в классе Format
arguments
- массив объектов, которые будут отформатированы и заменены.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
в классе Format
arguments
- массив объектов, которые будут отформатированы и заменены.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
в классе Format
source
- A String
, часть которого должна быть проанализирована.pos
- A ParsePosition
объект с индексом и ошибкой индексирует информацию как описано выше.Object
массив проанализирован от строки. В случае ошибки, нуля возвратов.NullPointerException
- если pos
нуль.public Object clone()
public boolean equals(Object obj)
equals
в классе Object
obj
- ссылочный объект, с которым можно сравниться.true
если этот объект является тем же самым как obj параметром; false
иначе.Object.hashCode()
, HashMap
public int hashCode()
hashCode
в классе Object
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.