Spec-Zone.ru › OpenJDK 17

Класс ChoiceFormat

java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.ChoiceFormat
Все реализованные интерфейсы:
Serializable, Cloneable
public class ChoiceFormat extends NumberFormat
A 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, необходимо указать массив форматов и массив ограничений. Длина этих массивов должна быть одинаковой. Например,

  • limits = {1,2,3,4,5,6,7}
    formats = {"Вс","Пн","Вт","Ср","Чт","Пт","Сб"}
  • limits = {0, 1, ChoiceFormat.nextDouble(1)}
    formats = {"файлов нет", "один файл", "много файлов"}
    (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] = new Integer(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.
 

Синхронизация

Форматы Choice не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к формату, его необходимо синхронизировать внешним образом.

С:
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 являются null
См. также:
  • setChoices(double[], java.lang.String[])

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

applyPattern

public void applyPattern(String newPattern)
Устанавливает шаблон.
Параметры:
newPattern - см. описание класса.
Исключения:
NullPointerException - если newPattern является null

toPattern

public String toPattern()
Возвращает шаблон.
Возвращает:
строку шаблона

setChoices

public void setChoices(double[] limits, String[] formats)
Устанавливает варианты, которые будут использоваться при форматировании.
Параметры:
limits - содержит максимальное значение, которое необходимо обработать с этим форматом, и должно быть отсортировано по возрастанию. При форматировании X, выбор будет i, где limit[i] ≤ X < limit[i+1]. Если массив limit не отсортирован по возрастанию, результаты форматирования будут некорректными.
formats - это форматы, которые нужно использовать для каждого ограничения. Они могут быть либо объектами Format, либо строками. При форматировании с объектом Y, если объект является NumberFormat, то вызывается ((NumberFormat) Y).format(X). В противном случае вызывается Y.toString().
Исключения:
NullPointerException - если limits или formats являются null

getLimits

public double[] getLimits()
Возвращает ограничения, переданные в конструктор.
Возвращает:
ограничения.

getFormats

public Object[] getFormats()
Возвращает форматы, переданные в конструктор.
Возвращает:
форматы.

format

public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
Специализация форматирования. Этот метод на самом деле вызывает format(double, StringBuffer, FieldPosition), поэтому диапазон длинных целых чисел, которые поддерживаются, равен диапазону, который может хранить double. Это никогда не будет практическим ограничением.
Определено в:
format в классе NumberFormat
Параметры:
number - длинное целое число для форматирования
toAppendTo - StringBuffer, в который будет добавлен отформатированный текст
status - отслеживает положение поля в возвращаемой строке. Например, для форматирования числа 123456789 в Locale.US locale, если заданный 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 - число, которое необходимо отформатировать и заменить.
toAppendTo - место, куда добавляется текст.
status - игнорируется, не возвращается полезный статус.
Возвращает:
отформатированный StringBuffer
Исключения:
NullPointerException - если toAppendTo является null
См. также:
  • 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 является null или если text является null и список строк выбора не пуст.
См. также:
  • 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, возвращает то же значение.
Примeчание реализации:
Это эквивалентно вызову 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, возвращает то же значение.
Примeчание реализации:
Это эквивалентно вызову positive ? Math.nextUp(d) : Math.nextDown(d)
Параметры:
d - значение ссылки
positive - true если нужно наименьшее double; false в противном случае
Возвращает:
наименьшее или наибольшее значение double

© 1993, 2021, 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/17/docs/api/java.base/java/text/ChoiceFormat.html

Spec-Zone.ru

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