Класс ChoiceFormat
- Все реализуемые интерфейсы:
Serializable, Cloneable
public class ChoiceFormat extends NumberFormat
ChoiceFormat — конкретный подкласс NumberFormat, который позволяет связать формат с диапазоном чисел. Обычно он используется в MessageFormat для обработки множественного числа. Выбор задаётся возрастающим списком чисел double, где каждый элемент определяет полуоткрытый интервал до следующего элемента: Если соответствие не найдено, используется либо первый, либо последний индекс — в зависимости от того, слишком мало или слишком велико число (X). Если массив предельных значений не упорядочен по возрастанию, результаты форматирования будут неверными. ChoiceFormat также принимаетX matches j if and only if limit[j] ≤ X < limit[j+1]
\u221E как эквивалент бесконечности (INF). Примечание: ChoiceFormat отличается от других классов Format тем, что объект ChoiceFormat создаётся с помощью конструктора (а не фабричного метода в стиле getInstance). Фабричные методы не нужны, поскольку ChoiceFormat не требует сложной настройки для конкретной локали. Фактически, ChoiceFormat не реализует поведение, зависящее от локали.
Шаблоны
ШаблонChoiceFormat имеет следующий синтаксис: Примечание: отношение ≤ не эквивалентно <=
- Шаблон:
- SubPattern *("|" SubPattern)
- Подшаблон:
- Limit Relation Format
- Примечание: каждый следующий подшаблон должен иметь возрастающий интервал Limit-Relation
- Предельное значение:
- Number / "∞" / "-∞"
- Число:
- ["-"] *(Digit) 1*(Decimal / Digit) *(Digit) [Exponent]
- Десятичная часть:
- 1*(Digit ".") / 1*("." Digit)
- Цифра:
- 0 - 9
- Экспонента:
- *(Digit) Digit ExponentSymbol Digit *(Digit)
- Символ экспоненты:
- "e" / "E"
- Отношение:
- "#" / "<" / "≤"
- Формат:
- Любые символы, кроме специального символа шаблона «|»
Чтобы использовать зарезервированный специальный символ шаблона внутри шаблона Формата, его необходимо заключить в одинарные кавычки. Например, new ChoiceFormat("1#'|'foo'|'").format(1) возвращает "|foo|". Чтобы получить буквальную одинарную кавычку, используйте две одинарные кавычки подряд. Например, new ChoiceFormat("1# ''one'' ").format(1) возвращает " 'one' ".
Сведения об использовании
ChoiceFormat можно создать с помощью массива форматов и массива предельных значений либо строки-шаблона. При создании с помощью массивов форматов и предельных значений длины этих массивов должны совпадать. Например:
- предельные значения = {1,2,3,4,5,6,7}
форматы = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"} - предельные значения = {0, 1, ChoiceFormat.nextDouble(1)}
форматы = {"no files", "one file", "many files"}
(nextDoubleможно использовать, чтобы получить следующее большее число double и создать полуоткрытый интервал.)
Ниже приведён пример создания ChoiceFormat с массивами для форматирования и разбора значений:
double[] limits = {1,2,3,4,5,6,7};
String[] dayOfWeekNames = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
ChoiceFormat form = new ChoiceFormat(limits, dayOfWeekNames);
ParsePosition status = new ParsePosition(0);
for (double i = 0.0; i <= 8.0; ++i) {
status.setIndex(0);
System.out.println(i + " -> " + form.format(i) + " -> "
+ form.parse(form.format(i),status));
}
Ниже приведён пример создания ChoiceFormat со строкой-шаблоном:
ChoiceFormat fmt = new ChoiceFormat(
"-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
System.out.println(fmt.format(Double.NEGATIVE_INFINITY)); // outputs "is negative"
System.out.println(fmt.format(-1.0)); // outputs "is negative"
System.out.println(fmt.format(0)); // outputs "is zero or fraction"
System.out.println(fmt.format(0.9)); // outputs "is zero or fraction"
System.out.println(fmt.format(1)); // outputs "is one"
System.out.println(fmt.format(1.5)); // outputs "is 1+"
System.out.println(fmt.format(2)); // outputs "is two"
System.out.println(fmt.format(2.1)); // outputs "is more than 2."
System.out.println(fmt.format(Double.NaN)); // outputs "is negative"
System.out.println(fmt.format(Double.POSITIVE_INFINITY)); // outputs "is more than 2."
Для более сложных шаблонов ChoiceFormat можно использовать вместе с MessageFormat, чтобы корректно формировать единственное и множественное число:
MessageFormat msgFmt = new MessageFormat("The disk \"{0}\" contains {1}.");
double[] fileLimits = {0,1,2};
String[] filePart = {"no files","one file","{1,number} files"};
ChoiceFormat fileChoices = new ChoiceFormat(fileLimits, filePart);
msgFmt.setFormatByArgumentIndex(1, fileChoices);
Object[] args = {"MyDisk", 1273};
System.out.println(msgFmt.format(args));
fileCount: См. разделThe disk "MyDisk" contains no files. The disk "MyDisk" contains one file. The disk "MyDisk" contains 1,273 files.
MessageFormat, где описаны особенности использования шаблонов MessageFormat внутри шаблона ChoiceFormat. Синхронизация
Форматы выбора не являются синхронизированными. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если к формату одновременно обращаются несколько потоков, синхронизацию необходимо выполнять извне.
- Примечание к API:
- Подкласс может выполнять более последовательную проверку шаблонов, выбрасывая
IllegalArgumentExceptionво всех случаях некорректных данных. Поведение этой реализации при некорректных шаблонах описано вImplementation Note.Этот класс наследует методы экземпляра от
NumberFormat, но не использует их; подкласс может переопределить такие методы и выбрасыватьUnsupportedOperationException. - Примечание по реализации:
- При некорректном шаблоне эта реализация может выбросить исключение или успешно завершить работу, отбросив некорректную часть.
NumberFormatExceptionвыбрасывается, еслиlimitне удаётся разобрать как числовое значение, аIllegalArgumentExceptionвыбрасывается, если отсутствуетSubPatternили интервалы не упорядочены по возрастанию. Отбрасывание некорректной части может привести к созданию ChoiceFormat с пустымиlimitsиformats. - Начиная с:
- 1.1
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе NumberFormat
NumberFormat.Field, NumberFormat.Style | Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
NumberFormat.Field |
Определяет константы, используемые в качестве ключей атрибутов в AttributedCharacterIterator, возвращаемом из NumberFormat.formatToCharacterIterator, и в качестве идентификаторов полей в FieldPosition. |
static enum |
NumberFormat.Style |
Стиль числового формата. |
Краткое описание полей
Поля, объявленные в классе NumberFormat
FRACTION_FIELD, INTEGER_FIELD | Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
FRACTION_FIELD |
Константа поля, используемая для создания объекта FieldPosition. |
static final int |
INTEGER_FIELD |
Константа поля, используемая для создания объекта FieldPosition. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ChoiceFormat |
Создаёт объект с предельными значениями и соответствующими форматами. |
ChoiceFormat |
Создаёт ChoiceFormat с предельными значениями и соответствующими форматами, заданными на основе шаблона. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyPattern |
Применяет заданный шаблон к этому объекту ChoiceFormat. |
Object |
clone() |
Переопределяет Cloneable |
boolean |
equals |
Сравнивает указанный объект с этим ChoiceFormat на равенство. |
StringBuffer |
format |
Возвращает шаблон с отформатированным числом double. |
StringBuffer |
format |
Специализация метода format. |
Object[] |
getFormats() |
Возвращает форматы этого объекта ChoiceFormat. |
double[] |
getLimits() |
Возвращает предельные значения этого объекта ChoiceFormat. |
int |
hashCode() |
Возвращает хеш-код этого ChoiceFormat. |
boolean |
isStrict() |
Возвращает true, если этот формат выполняет строгий разбор чисел; в противном случае возвращает false. |
static final double |
nextDouble |
Находит наименьшее число double, большее d. |
static double |
nextDouble |
Находит наименьшее число double, большее d (если positive — true), или наибольшее число double, меньшее d (если positive — false). |
Number |
parse |
Разбирает входной текст, начиная с индекса, заданного ParsePosition, как Double. |
static final double |
previousDouble |
Находит наибольшее число double, меньшее d. |
void |
setChoices |
Задаёт варианты выбора, используемые при форматировании. |
void |
setStrict |
Изменяет степень снисходительности при разборе. |
String |
toPattern() |
Возвращает шаблон string, представляющий limits и formats этого объекта ChoiceFormat. |
String |
toString() |
Возвращает строку, идентифицирующую этот ChoiceFormat, для отладки. |
Методы, объявленные в классе NumberFormat
format, format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrency, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, getRoundingMode, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setCurrency, setGroupingUsed, setMaximumFractionDigits, setMaximumIntegerDigits, setMinimumFractionDigits, setMinimumIntegerDigits, setParseIntegerOnly, setRoundingMode | Модификатор и тип | Метод | Описание |
|---|---|---|
final String |
format |
Специализация метода format. |
final String |
format |
Специализация метода format. |
StringBuffer |
format |
Форматирует число и добавляет полученный текст в указанный буфер строк. |
static Locale[] |
getAvailableLocales() |
Возвращает массив всех локалей, для которых методы get*Instance этого класса могут возвращать локализованные экземпляры. |
static NumberFormat |
getCompactNumberInstance() |
|
static NumberFormat |
getCompactNumberInstance |
Возвращает компактный числовой формат для указанной locale и formatStyle. |
Currency |
getCurrency() |
Возвращает валюту, используемую этим числовым форматом при форматировании денежных значений. |
static final NumberFormat |
getCurrencyInstance() |
Возвращает валютный формат для текущей локали FORMAT по умолчанию. |
static NumberFormat |
getCurrencyInstance |
Возвращает валютный формат для указанной локали. |
static final NumberFormat |
getInstance() |
Возвращает числовой формат общего назначения для текущей локали FORMAT по умолчанию. |
static NumberFormat |
getInstance |
Возвращает числовой формат общего назначения для указанной локали. |
static final NumberFormat |
getIntegerInstance() |
Возвращает целочисленный числовой формат для текущей локали FORMAT по умолчанию. |
static NumberFormat |
getIntegerInstance |
Возвращает целочисленный числовой формат для указанной локали. |
int |
getMaximumFractionDigits() |
Возвращает максимальное количество цифр, допустимое при форматировании в дробной части числа. |
int |
getMaximumIntegerDigits() |
Возвращает максимальное количество цифр, допустимое при форматировании в целой части числа. |
int |
getMinimumFractionDigits() |
Возвращает минимальное количество цифр, допустимое при форматировании в дробной части числа. |
int |
getMinimumIntegerDigits() |
Возвращает минимальное количество цифр, допустимое при форматировании в целой части числа. |
static final NumberFormat |
getNumberInstance() |
Возвращает числовой формат общего назначения для текущей локали FORMAT по умолчанию. |
static NumberFormat |
getNumberInstance |
Возвращает числовой формат общего назначения для указанной локали. |
static final NumberFormat |
getPercentInstance() |
Возвращает процентный формат для текущей локали FORMAT по умолчанию. |
static NumberFormat |
getPercentInstance |
Возвращает процентный формат для указанной локали. |
RoundingMode |
getRoundingMode() |
Возвращает RoundingMode, используемый в этом NumberFormat. |
boolean |
isGroupingUsed() |
Возвращает true, если в этом формате используется группировка. |
boolean |
isParseIntegerOnly() |
Возвращает true, если этот формат разбирает числа только как целые. |
Number |
parse |
Разбирает текст с начала указанной строки и создаёт Number. |
final Object |
parseObject |
Разбирает текст из указанной строки и создаёт объект. |
void |
setCurrency |
Задаёт валюту, используемую этим числовым форматом при форматировании денежных значений. |
void |
setGroupingUsed |
Задаёт, будет ли в этом формате использоваться группировка. |
void |
setMaximumFractionDigits |
Задаёт максимальное количество цифр, допустимое при форматировании в дробной части числа. |
void |
setMaximumIntegerDigits |
Задаёт максимальное количество цифр, допустимое при форматировании в целой части числа. |
void |
setMinimumFractionDigits |
Задаёт минимальное количество цифр, допустимое при форматировании в дробной части числа. |
void |
setMinimumIntegerDigits |
Задаёт минимальное количество цифр, допустимое при форматировании в целой части числа. |
void |
setParseIntegerOnly |
Задаёт, следует ли разбирать числа только как целые. |
void |
setRoundingMode |
Задаёт RoundingMode, используемый в этом NumberFormat. |
Методы, объявленные в классе Format
format, formatToCharacterIterator, parseObject | Модификатор и тип | Метод | Описание |
|---|---|---|
final String |
format |
Форматирует объект, создавая строку. |
AttributedCharacterIterator |
formatToCharacterIterator |
Форматирует Object, создавая AttributedCharacterIterator. |
Object |
parseObject |
Разбирает текст с начала указанной строки и создаёт объект. |
Методы, объявленные в классе 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 |
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно в результате вызова уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
ChoiceFormat
public ChoiceFormat(String newPattern)
ChoiceFormat(double[], String[]), этот конструктор вызовет исключение IllegalArgumentException, если limits расположены не в порядке возрастания.- Параметры:
-
newPattern— новая строка шаблона - Исключения:
-
NullPointerException— еслиnewPatternравноnull -
IllegalArgumentException— еслиnewPatternнарушает синтаксис шаблона - См. также:
ChoiceFormat
public ChoiceFormat(double[] limits, String[] formats)
- Параметры:
-
limits— пределы в порядке возрастания -
formats— соответствующие строки формата - Исключения:
-
NullPointerException— еслиlimitsилиformatsравноnull -
IllegalArgumentException— если длиныlimitsиformatsне равны - См. также:
Подробное описание методов
applyPattern
public void applyPattern(String newPattern)
setChoices(double[], String[]), этот метод вызовет исключение IllegalArgumentException, если limits расположены не в порядке возрастания.- Параметры:
-
newPattern— строка шаблона - Исключения:
-
NullPointerException— еслиnewPatternравноnull -
IllegalArgumentException— еслиnewPatternнарушает синтаксис шаблона - См. также:
toPattern
public String toPattern()
string, представляющий limits и formats этого объекта ChoiceFormat. Возвращенный string не обязательно совпадает с исходным string, переданным в applyPattern(String) или ChoiceFormat(String).- Возвращает:
- шаблон
string, представляющийlimitsиformatsэтого объекта ChoiceFormat - См. также:
setChoices
public void setChoices(double[] limits, String[] formats)
- Параметры:
-
limits— содержит верхнее значение, которое требуется разобрать с помощью этого формата; значения должны быть отсортированы по возрастанию. При форматировании X выбирается вариант i, для которого limit[i] ≤ X < limit[i+1]. Если массив пределов не упорядочен по возрастанию, результаты форматирования будут неверными. -
formats— форматы, используемые для каждого предела. - Исключения:
-
NullPointerException— еслиlimitsилиformatsравноnull -
IllegalArgumentException— если длиныlimitsиformatsне равны
getLimits
public double[] getLimits()
- Возвращает:
- пределы этого объекта ChoiceFormat
getFormats
public Object[] getFormats()
- Возвращает:
- форматы этого объекта ChoiceFormat
format
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
format(double, StringBuffer, FieldPosition). Поэтому поддерживаемый диапазон значений типа long ограничен диапазоном, представимым типом double. На практике это никогда не станет ограничением.- Определен в:
-
formatв классеNumberFormat - Параметры:
-
number— число для форматирования и подстановки. -
toAppendTo— буфер, в который добавляется текст. -
status— игнорируется; полезный статус не возвращается. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
ArrayIndexOutOfBoundsException— еслиlimitsилиformatsэтого объекта ChoiceFormat пусты -
NullPointerException— еслиtoAppendToравноnull - См. также:
format
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
- Определен в:
-
formatв классеNumberFormat - Параметры:
-
number— число для форматирования и подстановки. -
toAppendTo— буфер, в который добавляется текст. -
status— игнорируется; полезный статус не возвращается. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
ArrayIndexOutOfBoundsException— еслиlimitsилиformatsэтого объекта ChoiceFormat пусты -
NullPointerException— еслиtoAppendToравноnull - См. также:
parse
public Number parse(String text, ParsePosition status)
ParsePosition, как Double. Возвращаемое значение — limit, соответствующее format, которое является самой длинной подстрокой входного текста. Поиск выполняется в порядке возрастания; если текст одинаково хорошо соответствует нескольким format, возвращается первое совпавшее limit. Если совпадений нет, возвращается Double.NaN. Например:
var fmt = new ChoiceFormat("0#foo|1#bar|2#baz");
fmt.parse("baz", new ParsePosition(0)); // returns 2.0
fmt.parse("quux", new ParsePosition(0)); // returns NaN
- Определен в:
-
parseв классеNumberFormat - Параметры:
-
text— исходный текст. -
status— входной и выходной параметр. При вызове поле status.index указывает первый символ исходного текста, который следует разобрать. При выходе, если ошибок не возникло, status.index устанавливается в позицию первого неразобранного символа исходного текста. При выходе, если произошла ошибка, status.index не изменяется, а status.errorIndex устанавливается в позицию первого символа, вызвавшего сбой разбора. - Возвращает:
- Число, представляющее
limit, соответствующее разобранномуformat, илиDouble.NaN, если разбор завершился неудачно. - Исключения:
-
NullPointerException— еслиstatusравноnullили еслиtextравноnullи список строк вариантов не пуст. - См. также:
isStrict
public boolean isStrict()
NumberFormattrue, если этот формат выполняет строгий разбор чисел; в противном случае возвращает false.- Переопределяет:
-
isStrictв классеNumberFormat - Возвращает:
-
true, если этот формат выполняет строгий разбор чисел; в противном случае возвращаетfalse - С момента:
- 23
- См. также:
setStrict
public void setStrict(boolean strict)
NumberFormat- Переопределяет:
-
setStrictв классеNumberFormat - Параметры:
-
strict—true, если разбор должен выполняться строго; в противном случае —false - С момента:
- 23
- См. также:
nextDouble
public static final double nextDouble(double d)
d. Если NaN, возвращает то же значение. Используется для создания полуоткрытых интервалов.
- Примечание по реализации:
- Эквивалентно вызову
Math.nextUp(d) - Параметры:
-
d— опорное значение - Возвращает:
- наименьшее значение типа double, большее
d - См. также:
nextDouble
public static double nextDouble(double d, boolean positive)
d (если positive равно true), или наибольшее значение типа double, меньшее d (если positive равно false). Если NaN, возвращает то же значение.- Примечание по реализации:
- Эквивалентно вызову
positive ? Math.nextUp(d) : Math.nextDown(d) - Параметры:
-
d— опорное значение -
positive—true, если требуется наименьшее значение типа double; в противном случае —false - Возвращает:
- наименьшее или наибольшее значение типа double
previousDouble
public static final double previousDouble(double d)
d. Если NaN, возвращает то же значение.- Примечание по реализации:
- Эквивалентно вызову
Math.nextDown(d) - Параметры:
-
d— опорное значение - Возвращает:
- наибольшее значение типа double, меньшее
d - См. также:
clone
public Object clone()
- Переопределяет:
-
cloneв классеNumberFormat - Возвращает:
- копию этого экземпляра.
- См. также:
hashCode
public int hashCode()
ChoiceFormat.- Переопределяет:
-
hashCodeв классеNumberFormat - Требования к реализации:
- Этот метод вычисляет значение хеш-кода с использованием значений, возвращаемых методами
getFormats()иgetLimits(). - Возвращает:
- хеш-код этого
ChoiceFormat - См. также:
toString
equals
public boolean equals(Object obj)
ChoiceFormat на предмет равенства. Возвращает true, если объект также является ChoiceFormat и оба формата форматируют любое значение одинаково.- Переопределяет:
-
equalsв классеNumberFormat - Требования к реализации:
- Этот метод проверяет равенство, определяя идентичность класса на основе
getClass(), а неinstanceof. Поэтому в методах equals подклассов ни один экземпляр этого класса не должен считаться равным экземпляру подкласса. - Параметры:
-
obj— объект для сравнения на равенство - Возвращает:
-
true, если указанный объект равен этомуChoiceFormat - См. также:
© 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.