Класс 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, необходимо указать массив форматов и массив ограничений. Длина этих массивов должна быть одинаковой. Например,
- 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
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе 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являютсяnull - См. также:
Подробное описание методов
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.USlocale, если заданныйfieldPositionравенNumberFormat.INTEGER_FIELD, начальный и конечный индексыfieldPositionбудут установлены соответственно в 0 и 11 для выходной строки123,456,789. - Возвращает:
- отформатированный StringBuffer
- См. также:
format
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
- Определено в:
-
formatв классеNumberFormat - Параметры:
-
number- число, которое необходимо отформатировать и заменить. -
toAppendTo- место, куда добавляется текст. -
status- игнорируется, не возвращается полезный статус. - Возвращает:
- отформатированный StringBuffer
- Исключения:
-
NullPointerException- еслиtoAppendToявляетсяnull - См. также:
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и список строк выбора не пуст. - См. также:
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, возвращает то же значение.- Примeчание реализации:
- Это эквивалентно вызову
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, возвращает то же значение.- Прим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