Класс 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) Находит наименьшее число с плавающей точкой, большее чем |
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- новая строка шаблона - См. также:
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.