Класс ChoiceFormat
- java.lang.Object
-
- java.text.Format
-
- java.text.NumberFormat
-
- java.text.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) | Находит наименьшее число с плавающей точкой, большее чем |
static double | nextDouble(double d,
boolean positive) | Находит наименьшее число с плавающей точкой, большее чем |
Number | parse(String text,
ParsePosition status) | Разбирает число из входного текста. |
static double | previousDouble(double 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