Spec-Zone.ru › OpenJDK 21

Класс ChoiceFormat

java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.ChoiceFormat
Все реализуемые интерфейсы:
Serializable, Cloneable
public class ChoiceFormat extends NumberFormat
Класс ChoiceFormat позволяет привязать формат к диапазону чисел. Он обычно используется в MessageFormat для обработки множественных форм. Выбор задается возрастающим списком double, где каждый элемент определяет полуоткрытый интервал до следующего элемента:
 X matches j if and only if limit[j] ≤ X < limit[j+1]
 
Если совпадений нет, то используется либо первый, либо последний индекс, в зависимости от того, слишком ли мало или слишком велико число (X). Если массив пределов не отсортирован по возрастанию, результаты форматирования будут некорректными. ChoiceFormat также принимает \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
См. также:
  • DecimalFormat
  • MessageFormat
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в классе java.text.NumberFormat

NumberFormat.Field, NumberFormat.Style

Краткое описание полей

Поля, объявленные в классе java.text.NumberFormat

FRACTION_FIELD, INTEGER_FIELD

Краткое описание конструкторов

Конструктор Описание
ChoiceFormat(double[] limits, String[] formats)
Создаёт объект с заданными пределами и соответствующими форматами.
ChoiceFormat(String newPattern)
Создаёт объект с пределами и соответствующими форматами на основе шаблона.

Краткое описание методов

Модификатор и тип Метод Описание
void applyPattern(String newPattern)
Устанавливает шаблон.
Object clone()
Переопределяет Cloneable
boolean equals(Object obj)
Сравнение на равенство между двумя
StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
Возвращает шаблон с отформатированным double.
StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
Специализация форматирования.
Object[] getFormats()
Получить форматы, переданные в конструкторе.
double[] getLimits()
Получить пределы, переданные в конструкторе.
int hashCode()
Генерирует хэш-код для объекта формата сообщения.
static final double nextDouble(double d)
Находит наименьшее double, большее чем d.
static double nextDouble(double d, boolean positive)
Находит наименьшее double, большее чем d, (если positive есть true ), или наибольшее double, меньшее чем d (если positive есть false ).
Number parse(String text, ParsePosition status)
Разбирает число из входного текста.
static final double previousDouble(double d)
Находит наибольшее double, меньшее чем d.
void setChoices(double[] limits, String[] formats)
Устанавливает используемые в форматировании варианты.
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

Методы, объявленные в классе java.lang.Object

finalize, getClass, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

ChoiceFormat

public ChoiceFormat(String newPattern)
Создаёт объект с пределами и соответствующими форматами на основе шаблона.
Параметры:
newPattern - новая строка шаблона
Исключения:
NullPointerException - если newPattern является null
См. также:
  • applyPattern(java.lang.String)

ChoiceFormat

public ChoiceFormat(double[] limits, String[] formats)
Создаёт объект с пределами и соответствующими форматами.
Параметры:
limits - пределы в порядке возрастания
formats - соответствующие строки форматов
Исключения:
NullPointerException - если limits или formats некорректны
См. также:
  • setChoices(double[], java.lang.String[])

Подробное описание методов

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. Этот метод фактически вызывает 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.format(java.lang.Object)

format

public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
Возвращает шаблон с отформатированным double.
Определено в:
format в классе NumberFormat
Параметры:
number - число double для форматирования и подстановки.
toAppendTo - место, куда добавляется текст.
status - игнорируется, нет полезного состояния.
Возвращает:
отформатированный StringBuffer
Исключения:
NullPointerException - если toAppendTo некорректен
См. также:
  • Format.format(java.lang.Object)

parse

public Number parse(String text, ParsePosition status)
Парсит число из входного текста.
Определено в:
parse в классе NumberFormat
Параметры:
text - исходный текст.
status - входной-выходной параметр. На входе поле status.index указывает первый символ исходного текста, который нужно обработать. На выходе, если ошибки не произошло, status.index устанавливается на первый непрочитанный символ в исходном тексте. На выходе, если ошибка произошла, status.index не изменяется, а status.errorIndex устанавливается на индекс первого символа, вызвавшего ошибку при парсинге.
Возвращает:
Число, представляющее значение обработанного числа.
Исключения:
NullPointerException - если status некорректен или если text некорректен и список строк вариантов не пуст.
См. также:
  • NumberFormat.isParseIntegerOnly()
  • Format.parseObject(java.lang.String, java.text.ParsePosition)

nextDouble

public static final double nextDouble(double d)
Находит наименьшее double, большее, чем d. Если NaN, возвращает то же значение.

Используется для создания полуоткрытых интервалов.

Примечание реализации:
Это эквивалентно вызову Math.nextUp(d)
Параметры:
d - справочное значение
Возвращает:
наименьшее значение double, большее, чем d
См. также:
  • previousDouble(double)

previousDouble

public static final double previousDouble(double d)
Находит наибольшее double, меньшее, чем d. Если NaN, возвращает то же значение.
Примечание реализации:
Это эквивалентно вызову Math.nextDown(d)
Параметры:
d - справочное значение
Возвращает:
наибольшее значение double, меньшее, чем d
См. также:
  • nextDouble(double)

clone

public Object clone()
Переопределяет Cloneable
Переопределяет:
clone в классе NumberFormat
Возвращает:
клонированный экземпляр.
См. также:
  • Cloneable

hashCode

public int hashCode()
Генерирует хэш-код для объекта формата сообщения.
Переопределяет:
hashCode в классе NumberFormat
Возвращает:
значение хэш-кода для этого объекта.
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

equals

public boolean equals(Object obj)
Сравнение на равенство между двумя объектами
Переопределяет:
equals в классе NumberFormat
Параметры:
obj - эталонный объект для сравнения.
Возвращает:
true если этот объект такой же, как аргумент obj; false в противном случае.
См. также:
  • Object.hashCode()
  • HashMap

nextDouble

public static double nextDouble(double d, boolean positive)
Находит наименьшее double, большее чем 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API