Класс ChoiceFormat
- Все реализуемые интерфейсы:
-
Serializable,Cloneable
public class ChoiceFormat extends NumberFormat
ChoiceFormat позволяет привязать формат к диапазону чисел. Он обычно используется в 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, необходимо указать массив форматов и массив пределов. Длина этих массивов должна быть одинаковой. Например,
- пределы = {1,2,3,4,5,6,7}
форматы = {"Вс","Пн","Вт","Ср","Чт","Пт","Сб"} - пределы = {0, 1, ChoiceFormat.nextDouble(1)}
форматы = {"нет файлов", "один файл", "множество файлов"}
(nextDoubleможно использовать для получения следующего большего double, чтобы создать полуоткрытый интервал.)
Вот простой пример, который демонстрирует форматирование и разбор:
Вот более сложный пример с форматом шаблона: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)); }
double[] filelimits = {0,1,2}; String[] filepart = {"are no files","is one file","are {2} files"}; ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart); Format[] testFormats = {fileform, null, NumberFormat.getInstance()}; MessageFormat pattform = new MessageFormat("There {0} on {1}"); pattform.setFormats(testFormats); Object[] testArgs = {null, "ADisk", null}; for (int i = 0; i < 4; ++i) { testArgs[0] = Integer.valueOf(i); testArgs[2] = testArgs[0]; System.out.println(pattform.format(testArgs)); }
Задание шаблона для объектов 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("Formatter Pattern : " + fmt.toPattern()); System.out.println("Format with -INF : " + fmt.format(Double.NEGATIVE_INFINITY)); System.out.println("Format with -1.0 : " + fmt.format(-1.0)); System.out.println("Format with 0 : " + fmt.format(0)); System.out.println("Format with 0.9 : " + fmt.format(0.9)); System.out.println("Format with 1.0 : " + fmt.format(1)); System.out.println("Format with 1.5 : " + fmt.format(1.5)); System.out.println("Format with 2 : " + fmt.format(2)); System.out.println("Format with 2.1 : " + fmt.format(2.1)); System.out.println("Format with NaN : " + fmt.format(Double.NaN)); System.out.println("Format with +INF : " + fmt.format(Double.POSITIVE_INFINITY));
Format with -INF : is negative Format with -1.0 : is negative Format with 0 : is zero or fraction Format with 0.9 : is zero or fraction Format with 1.0 : is one Format with 1.5 : is 1+ Format with 2 : is two Format with 2.1 : is more than 2. Format with NaN : is negative Format with +INF : is more than 2.
Синхронизация
Объекты ChoiceFormat не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков обращаются к формату одновременно, необходимо выполнить внешнюю синхронизацию.
- С:
- 1.1
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat
NumberFormat.Field, NumberFormat.Style
Краткое описание полей
Поля, объявленные в классе java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ChoiceFormat |
Создаёт объект с заданными пределами и соответствующими форматами. |
ChoiceFormat |
Создаёт объект с пределами и соответствующими форматами на основе шаблона. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyPattern |
Устанавливает шаблон. |
Object |
clone() |
Переопределяет Cloneable |
boolean |
equals |
Сравнение на равенство между двумя |
StringBuffer |
format |
Возвращает шаблон с отформатированным double. |
StringBuffer |
format |
Специализация форматирования. |
Object[] |
getFormats() |
Получить форматы, переданные в конструкторе. |
double[] |
getLimits() |
Получить пределы, переданные в конструкторе. |
int |
hashCode() |
Генерирует хэш-код для объекта формата сообщения. |
static final double |
nextDouble |
Находит наименьшее double, большее чем d. |
static double |
nextDouble |
Находит наименьшее double, большее чем d, (если positive есть true ), или наибольшее double, меньшее чем d (если positive есть false ). |
Number |
parse |
Разбирает число из входного текста. |
static final double |
previousDouble |
Находит наибольшее double, меньшее чем d. |
void |
setChoices |
Устанавливает используемые в форматировании варианты. |
String |
toPattern() |
Получает шаблон. |
Методы, объявленные в классе 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)
- Параметры:
-
newPattern- новая строка шаблона - Исключения:
-
NullPointerException- еслиnewPatternявляетсяnull - См. также:
ChoiceFormat
public ChoiceFormat(double[] limits, String[] formats)
- Параметры:
-
limits- пределы в порядке возрастания -
formats- соответствующие строки форматов - Исключения:
-
NullPointerException- еслиlimitsилиformatsнекорректны - См. также:
Подробное описание методов
applyPattern
public void applyPattern(String newPattern)
- Параметры:
-
newPattern- см. описание класса. - Исключения:
-
NullPointerException- еслиnewPatternнекорректен
toPattern
public String toPattern()
- Возвращает:
- строку шаблона
setChoices
public void setChoices(double[] limits, String[] formats)
- Параметры:
-
limits- содержит верхнее значение, которое вы хотите обработать с помощью этого формата, и должно быть в отсортированном порядке по возрастанию. При форматировании X, выбор будет i, где limit[i] ≤ X < limit[i+1]. Если массив limit не отсортирован по возрастанию, результаты форматирования будут некорректными. -
formats- форматы, которые вы хотите использовать для каждого предела. - Исключения:
-
NullPointerException- еслиlimitsилиformatsнекорректны
getLimits
public double[] getLimits()
- Возвращает:
- пределы.
getFormats
public Object[] getFormats()
- Возвращает:
- форматы.
format
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
format(double, StringBuffer, FieldPosition), поэтому диапазон long, который поддерживается, равен диапазону, который может быть сохранён double. Это никогда не будет практическим ограничением.- Определено в:
-
formatв классеNumberFormat - Параметры:
-
number- число long для форматирования -
toAppendTo- StringBuffer, в который будет добавлен отформатированный текст -
status- отслеживает позицию поля в возвращённой строке. Например, для форматирования числа123456789вLocale.USлокали, если заданныйfieldPositionравенNumberFormat.INTEGER_FIELD, начальный и конечный индексыfieldPositionбудут установлены на 0 и 11 соответственно для выходной строки123,456,789. - Возвращает:
- отформатированный StringBuffer
- См. также:
format
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
- Определено в:
-
formatв классеNumberFormat - Параметры:
-
number- число double для форматирования и подстановки. -
toAppendTo- место, куда добавляется текст. -
status- игнорируется, нет полезного состояния. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
NullPointerException- еслиtoAppendToнекорректен - См. также:
parse
public Number parse(String text, ParsePosition status)
- Определено в:
-
parseв классеNumberFormat - Параметры:
-
text- исходный текст. -
status- входной-выходной параметр. На входе поле status.index указывает первый символ исходного текста, который нужно обработать. На выходе, если ошибки не произошло, status.index устанавливается на первый непрочитанный символ в исходном тексте. На выходе, если ошибка произошла, status.index не изменяется, а status.errorIndex устанавливается на индекс первого символа, вызвавшего ошибку при парсинге. - Возвращает:
- Число, представляющее значение обработанного числа.
- Исключения:
-
NullPointerException- еслиstatusнекорректен или еслиtextнекорректен и список строк вариантов не пуст. - См. также:
nextDouble
public static final double nextDouble(double d)
d. Если NaN, возвращает то же значение. Используется для создания полуоткрытых интервалов.
- Примечание реализации:
- Это эквивалентно вызову
Math.nextUp(d) - Параметры:
-
d- справочное значение - Возвращает:
- наименьшее значение double, большее, чем
d - См. также:
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()
- Переопределяет:
-
hashCodeв классеNumberFormat - Возвращает:
- значение хэш-кода для этого объекта.
- См. также:
equals
public boolean equals(Object obj)
- Переопределяет:
-
equalsв классеNumberFormat - Параметры:
-
obj- эталонный объект для сравнения. - Возвращает:
-
trueесли этот объект такой же, как аргумент obj;falseв противном случае. - См. также:
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
© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/text/ChoiceFormat.html