Spec-Zone.ru › OpenJDK 8

Класс ChoiceFormat

  • java.lang.Object
    • java.text.Format
      • java.text.NumberFormat
        • java.text.ChoiceFormat
Все реализованные интерфейсы:
Serializable, Cloneable

public class ChoiceFormat
extends NumberFormat

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

X matches j if and only if limit[j] ≤ X < limit[j+1]
Если совпадения нет, используется первый или последний индекс в зависимости от того, слишком ли число (X) мало или велико. Если массив пределов не упорядочен по возрастанию, результаты форматирования будут неверными. ChoiceFormat также принимает \u221E как эквивалент бесконечности (INF).

Примечание: ChoiceFormat отличается от других классов форматирования чисел тем, что вы создаёте объект ChoiceFormat с конструктором (а не с фабричным методом). Фабричные методы не нужны, поскольку 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 не синхронизированы. Рекомендуется создавать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к формату, он должен быть синхронизирован внешне.

См. также:
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 - новая строка шаблона
См. также:
applyPattern(java.lang.String)

ChoiceFormat

public ChoiceFormat(double[] limits,
                    String[] formats)

Создаёт объект с ограничениями и соответствующими форматами.

Параметры:
limits - ограничения в порядке возрастания
formats - соответствующие строки формата
См. также:
setChoices(double[], java.lang.String[])

Методы

applyPattern

public void applyPattern(String newPattern)

Устанавливает шаблон.

Параметры:
newPattern - см. описание класса.

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().

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 - позиция поля
Возвращает:
отформатированный StringBuffer
См. также:
Format.format(java.lang.Object)

format

public StringBuffer format(double number,
                           StringBuffer toAppendTo,
                           FieldPosition status)

Возвращает шаблон с отформатированным double.

Определено в:
format в классе NumberFormat
Параметры:
number - число для форматирования и подстановки.
toAppendTo - место добавления текста.
status - игнорировать, полезный статус не возвращается.
Возвращает:
отформатированный StringBuffer
См. также:
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 устанавливается на первый индекс символа, вызвавшего ошибку в парсинге.
Возвращает:
Число, представляющее значение обработанного числа.
См. также:
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.

Spec-Zone.ru

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