Класс ChoiceFormat

Все реализованные интерфейсы:
Serializable, Cloneable
public class ChoiceFormat
extends NumberFormat

Объект ChoiceFormat позволяет прикрепить формат к диапазону чисел. Он обычно используется в MessageFormat для обработки множественного числа. Выбор задается возрастающим списком чисел с плавающей точкой, где каждое значение задает полуоткрытый интервал до следующего значения:

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[] 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

Поля

Поля, объявленные в классе 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)

Возвращает шаблон с отформатированным числом с плавающей точкой.

StringBuffer format​(long number, StringBuffer toAppendTo, FieldPosition status)

Специализация формата.

Object[] getFormats()

Получить форматы, переданные в конструктор.

double[] getLimits()

Получить границы, переданные в конструктор.

int hashCode()

Генерирует код хэша для объекта формата сообщений.

static double nextDouble​(double d)

Находит наименьшее число с плавающей точкой, большее чем d.

static double nextDouble​(double d, boolean positive)

Находит наименьшее число с плавающей точкой, большее чем d (если positive равно true), или наибольшее число с плавающей точкой, меньшее чем d (если positive равно false).

Number parse​(String text, ParsePosition status)

Разбирает число из входного текста.

static double previousDouble​(double d)

Находит наибольшее число с плавающей точкой, меньшее чем d.

void setChoices​(double[] limits, String[] formats)

Устанавливает варианты, которые будут использоваться при форматировании.

String toPattern()

Получает шаблон.

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

format, format, format, getAvailableLocales, 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. Этот метод фактически вызывает 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 является 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, возвращает то же значение.

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

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

previousDouble

public static final double previousDouble(double d)

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

Параметры:
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, возвращает то же значение. Не влияет на флаги с плавающей точкой, при условии, что эти функции-члены не делают этого: Double.longBitsToDouble(long) Double.doubleToLongBits(double) Double.isNaN(double)

Параметры:
d - значение ссылки
positive - true если нужно наименьшее значение double; false в противном случае
Возвращаемое значение:
наименьшее или наибольшее значение double

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

Spec-Zone .ru
спецификации, руководства, описания, API