Класс ChoiceFormat
- Все реализуемые интерфейсы:
-
Serializable,Cloneable
public class ChoiceFormat extends NumberFormat
ChoiceFormat — это конкретный подкласс NumberFormat, который позволяет прикрепить формат к диапазону чисел. Он обычно используется в MessageFormat для обработки множественного числа. Выбор задается возрастающим списком чисел с двойной точностью, где каждое значение определяет полуоткрытый интервал до следующего значения: Если соответствия нет, то используется либо первый, либо последний индекс, в зависимости от того, слишком ли мало или слишком ли велико число (X). Если массив границ не упорядочен по возрастанию, результаты форматирования будут некорректными. ChoiceFormat также принимаетX matches j if and only if limit[j] ≤ X < limit[j+1]
\u221E как эквивалент бесконечности (INF). Примечание: ChoiceFormat отличается от других классов Format тем, что вы создаёте объект ChoiceFormat с конструктором (а не с фабричным методом стиля getInstance). Фабричные методы не нужны, потому что ChoiceFormat не требует сложной настройки для заданного языка. Фактически, ChoiceFormat не реализует никакого поведения, специфичного для языка.
Шаблоны
ШаблонChoiceFormat имеет следующий синтаксис: Примечание:Отношение ≤ не эквивалентно <=
- Шаблон:
- Подшаблон *("|" Подшаблон)
- Подшаблон:
- Граница Отношение Формат
- Примечание: Каждый дополнительный подшаблон должен иметь интервал Граница-Отношение по возрастанию
- Граница:
- Число / "∞" / "-∞"
- Число:
- ["-"] *(Цифра) 1*(Десятичная / Цифра) *(Цифра) [Показатель]
- Десятичная:
- 1*(Цифра ".") / 1*("." Цифра)
- Цифра:
- 0 - 9
- Показатель:
- *(Цифра) Цифра СимволПоказателя Цифра *(Цифра)
- СимволПоказателя:
- "e" / "E"
- Отношение:
- "#" / "<" / "≤"
- Формат:
- Любые символы, кроме специального символа шаблона '|'
Чтобы использовать зарезервированный специальный символ шаблона внутри шаблона Формат, он должен быть заключён в одинарные кавычки. Например, new ChoiceFormat("1#'|'foo'|'").format(1) возвращает "|foo|". Используйте две одинарные кавычки подряд, чтобы получить литеральную одинарную кавычку. Например, new ChoiceFormat("1# ''one'' ").format(1) возвращает " 'one' ".
Информация об использовании
ChoiceFormat может быть создан, используя массив форматов и массив границ или строковый шаблон. При создании с массивами форматов и границ, длина этих массивов должна быть одинаковой. Например,
- limits = {1,2,3,4,5,6,7}
formats = {"Вс","Пн","Вт","Ср","Чт","Пт","Сб"} - limits = {0, 1, ChoiceFormat.nextDouble(1)}
formats = {"нет файлов", "один файл", "много файлов"}
(nextDoubleможет использоваться для получения следующего большего числа с двойной точностью, чтобы создать полуоткрытый интервал.)
Ниже приведен пример создания 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. Синхронизация
Форматы Choice не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если к формату одновременно обращаются несколько потоков, он должен быть внешне синхронизирован.
- Примечание API:
- Подкласс может выполнить более согласованную проверку шаблонов, выбросив
IllegalArgumentExceptionдля всех некорректных случаев. См.Implementation Noteдля поведения этой реализации в отношении некорректных шаблонов.Этот класс наследует методы экземпляра
NumberFormat, которые он не использует; подкласс мог бы переопределить их и выброситьUnsupportedOperationExceptionдля таких методов. - Примечание реализации:
- В случае некорректного шаблона эта реализация может либо выбросить исключение, либо преуспеть и отбросить некорректную часть. Выбрасывается
NumberFormatException, еслиlimitне может быть проанализирован как числовое значение, иIllegalArgumentExceptionвыбрасывается, еслиSubPatternотсутствует или интервалы не упорядочены по возрастанию. Отбрасывание некорректной части может привести к ChoiceFormat с пустымиlimitsиformats. - С тех пор:
- 1.1
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat
NumberFormat.Field, NumberFormat.Style
Краткое описание полей
Поля, объявленные в классе java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ChoiceFormat |
Конструктор с границами и соответствующими форматами. |
ChoiceFormat |
Конструктор ChoiceFormat с границами и соответствующими форматами на основе шаблона. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyPattern |
Применение заданного шаблона к этому объекту ChoiceFormat. |
Object |
clone() |
Переопределяет Cloneable |
boolean |
equals |
Сравнение указанного объекта с этим ChoiceFormat на равенство. |
StringBuffer |
format |
Возвращает шаблон с отформатированным числом с плавающей точкой. |
StringBuffer |
format |
Специализация форматирования. |
Object[] |
getFormats() |
Возвращает форматы этого ChoiceFormat. |
double[] |
getLimits() |
Возвращает границы этого ChoiceFormat. |
int |
hashCode() |
Возвращает хэш-код для этого ChoiceFormat. |
boolean |
isStrict() |
Возвращает true, если этот формат будет анализировать числа строго; false в противном случае. |
static final double |
nextDouble |
Поиск наименьшего числа с плавающей точкой, большего чем d. |
static double |
nextDouble |
Поиск наименьшего числа с плавающей точкой, большего чем d (если positive равно true), или наибольшего числа с плавающей точкой, меньшего чем d (если positive равно false). |
Number |
parse |
Разбор числа из входного текста. |
static final double |
previousDouble |
Поиск наибольшего числа с плавающей точкой, меньшего чем d. |
void |
setChoices |
Установить используемые варианты для форматирования. |
void |
setStrict |
Изменение значения толерантности для разбора. |
String |
toPattern() |
Возвращает шаблон string, который представляет limits и formats этого объекта ChoiceFormat. |
String |
toString() |
Возвращает строку, идентифицирующую этот ChoiceFormat, для отладки. |
Методы, объявленные в классе java.text.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
Методы, объявленные в классе java.text.Format
format, formatToCharacterIterator, parseObject
Подробное описание конструкторов
ChoiceFormat
public ChoiceFormat(String newPattern)
ChoiceFormat(double[], String[]), этот конструктор будет выбрасывать IllegalArgumentException, если limits не отсортированы по возрастанию.- Параметры:
-
newPattern- новая строка шаблона - Исключения:
-
NullPointerException- еслиnewPatternnull -
IllegalArgumentException- еслиnewPatternнарушает синтаксис шаблона - См. также:
ChoiceFormat
public ChoiceFormat(double[] limits, String[] formats)
- Параметры:
-
limits- пределы в порядке возрастания -
formats- соответствующие строки форматов - Исключения:
-
NullPointerException- еслиlimitsилиformatsnull -
IllegalArgumentException- если длинаlimitsиformatsне равны - См. также:
Подробное описание методов
applyPattern
public void applyPattern(String newPattern)
setChoices(double[], String[]), этот метод будет выбрасывать IllegalArgumentException, если limits не отсортированы по возрастанию.- Параметры:
-
newPattern- строка шаблона - Исключения:
-
NullPointerException- еслиnewPatternnull -
IllegalArgumentException- еслиnewPatternнарушает синтаксис шаблона - См. также:
toPattern
public String toPattern()
string, который представляет пределы и форматы этого объекта ChoiceFormat. Возвращаемый шаблон не гарантируется как идентичный входному string, переданному в applyPattern(String) или ChoiceFormat(String).- Возвращает:
- шаблон
string, который представляет пределы и форматы этого объекта ChoiceFormat - См. также:
setChoices
public void setChoices(double[] limits, String[] formats)
- Параметры:
-
limits- содержит верхнее значение, которое нужно разобрать с этим форматом и должно быть отсортировано по возрастанию. При форматировании X, выбор будет i, где limit[i] ≤ X < limit[i+1]. Если массив limit не отсортирован по возрастанию, результаты форматирования будут некорректными. -
formats- форматы, которые нужно использовать для каждого предела. - Исключения:
-
NullPointerException- еслиlimitsилиformatsnull -
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). Таким образом, диапазон длин целых чисел, которые поддерживаются, равен диапазону, который может быть сохранён типом double. Это никогда не будет практическим ограничением.- Задано в:
-
formatв классеNumberFormat - Параметры:
-
number- число, подлежащее форматированию и замене. -
toAppendTo- место, куда добавляется текст. -
status- игнорируется, полезный статус не возвращается. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
ArrayIndexOutOfBoundsException- если либоlimits, либоformatsэтого ChoiceFormat пустые -
NullPointerException- еслиtoAppendTonull - См. также:
format
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
- Задано в:
-
formatв классеNumberFormat - Параметры:
-
number- число, подлежащее форматированию и замене. -
toAppendTo- место, куда добавляется текст. -
status- игнорируется, полезный статус не возвращается. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
ArrayIndexOutOfBoundsException- если либоlimits, либоformatsэтого ChoiceFormat пустые -
NullPointerException- еслиtoAppendTonull - См. также:
parse
public Number parse(String text, ParsePosition status)
- Задано в:
-
parseв классеNumberFormat - Параметры:
-
text- исходный текст. -
status- входной параметр. При вводе поле status.index указывает первый символ исходного текста, который должен быть разобран. При выходе, если ошибки не было, status.index устанавливается на первый необработанный символ в исходном тексте. При выходе, если произошла ошибка, status.index не изменяется, а status.errorIndex устанавливается на первый индекс символа, вызвавшего сбой разбора. - Возвращает:
- Число, представляющее значение разобранного числа.
- Исключения:
-
NullPointerException- еслиstatusnullили еслиtextnull, и список строк выбора не пуст. - См. также:
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, возвращает то же значение.- Implementation Note:
- Это эквивалентно вызову
positive ? Math.nextUp(d) : Math.nextDown(d) - Parameters:
-
d- значение для сравнения -
positive-true, если нужно наименьшее double;falseв противном случае - Returns:
- наименьшее или наибольшее значение double
previousDouble
public static final double previousDouble(double d)
d. Если NaN, возвращает то же значение.- Implementation Note:
- Это эквивалентно вызову
Math.nextDown(d) - Parameters:
-
d- значение для сравнения - Returns:
- наибольшее значение double, меньшее чем
d - See Also:
clone
public Object clone()
- Overrides:
-
cloneв классеNumberFormat - Returns:
- клонированный экземпляр.
- See Also:
hashCode
public int hashCode()
ChoiceFormat.- Overrides:
-
hashCodeв классеNumberFormat - Implementation Requirements:
- Этот метод рассчитывает значение хэша, используя значения, возвращаемые
getFormats()иgetLimits(). - Returns:
- код хэширования для этого
ChoiceFormat - See Also:
toString
equals
public boolean equals(Object obj)
ChoiceFormat на равенство. Возвращает true, если объект также является ChoiceFormat и два формата будут форматировать любое значение одинаково.- Overrides:
-
equalsв классеNumberFormat - Implementation Requirements:
- Этот метод выполняет проверку на равенство с понятием идентичности класса, основанного на
getClass(), а не наinstanceof. Поэтому в методах equals в подклассах ни один экземпляр этого класса не должен сравниваться как равный экземпляру подкласса. - Parameters:
-
obj- объект для сравнения на равенство - Returns:
-
true, если указанный объект равен этомуChoiceFormat - See Also:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/text/ChoiceFormat.html