java.lang.Object
java.text.Format
java.text.NumberFormat
java.text.ChoiceFormat
- 所有已实现的接口:
-
Serializable
,Cloneable
ChoiceFormat
允许您为一系列数字附加格式。通常在处理复数形式时在 MessageFormat
中使用。选择是通过升序的双精度列表指定的,其中每个项目指定一个半开区间直到下一个项目:
如果没有匹配项,则使用第一个或最后一个索引,具体取决于数字 (X) 是太低还是太高。如果限制数组不是按升序排列的,则格式化的结果将不正确。ChoiceFormat 还接受X 匹配 j 当且仅当 limit[j] ≤ X < limit[j+1]
\u221E
作为无穷大(INF)的等价物。
注意: ChoiceFormat
与其他 Format
类不同,因为您使用构造函数创建 ChoiceFormat
对象(而不是使用 getInstance
风格的工厂方法)。工厂方法并不是必需的,因为对于给定的区域设置,ChoiceFormat
不需要任何复杂的设置。事实上,ChoiceFormat
不实现任何特定于区域设置的行为。
创建 ChoiceFormat
时,必须指定一个格式数组和一个限制数组。这些数组的长度必须相同。例如,
- limits = {1,2,3,4,5,6,7}
formats = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"} - limits = {0, 1, ChoiceFormat.nextDouble(1)}
formats = {"no files", "one file", "many files"}
(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] = Integer.valueOf(i); testArgs[2] = testArgs[0]; System.out.println(pattform.format(testArgs)); }
为 ChoiceFormat 对象指定模式相当简单。例如:
输出结果如下:ChoiceFormat fmt = new ChoiceFormat( "-1#是负数| 0#是零或小数 | 1#是一 |1.0<是 1+ |2#是二 |2<是大于2的。"); System.out.println("格式化模式 : " + fmt.toPattern()); System.out.println("使用 -INF 格式化 : " + fmt.format(Double.NEGATIVE_INFINITY)); System.out.println("使用 -1.0 格式化 : " + fmt.format(-1.0)); System.out.println("使用 0 格式化 : " + fmt.format(0)); System.out.println("使用 0.9 格式化 : " + fmt.format(0.9)); System.out.println("使用 1.0 格式化 : " + fmt.format(1)); System.out.println("使用 1.5 格式化 : " + fmt.format(1.5)); System.out.println("使用 2 格式化 : " + fmt.format(2)); System.out.println("使用 2.1 格式化 : " + fmt.format(2.1)); System.out.println("使用 NaN 格式化 : " + fmt.format(Double.NaN)); System.out.println("使用 +INF 格式化 : " + fmt.format(Double.POSITIVE_INFINITY));
使用 -INF 格式化 : 是负数 使用 -1.0 格式化 : 是负数 使用 0 格式化 : 是零或小数 使用 0.9 格式化 : 是零或小数 使用 1.0 格式化 : 是一 使用 1.5 格式化 : 是 1+ 使用 2 格式化 : 是二 使用 2.1 格式化 : 是大于2的。 使用 NaN 格式化 : 是负数 使用 +INF 格式化 : 是大于2的。
同步
ChoiceFormat 对象不是同步的。建议为每个线程创建单独的格式实例。如果多个线程同时访问一个格式,必须在外部进行同步。
- 自版本:
- 1.1
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in class java.text.NumberFormat
NumberFormat.Field, NumberFormat.Style
-
Field Summary
Fields declared in class java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
-
Constructor Summary
ConstructorDescriptionChoiceFormat
(double[] limits, String[] formats) 使用限制和相应格式构造对象。ChoiceFormat
(String newPattern) 基于模式使用限制和相应格式构造对象。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
applyPattern
(String newPattern) 设置模式。clone()
覆盖 Cloneableboolean
两者之间的相等比较format
(double number, StringBuffer toAppendTo, FieldPosition status) 返回带有格式化双精度数的模式。format
(long number, StringBuffer toAppendTo, FieldPosition status) 格式的特化。Object[]
获取构造函数中传递的格式。double[]
获取构造函数中传递的限制。int
hashCode()
为消息格式对象生成哈希码。static final double
nextDouble
(double d) 查找大于d
的最小双精度数。static double
nextDouble
(double d, boolean positive) 查找大于d
的最小双精度数(如果positive
为true
),或小于d
的最大双精度数(如果positive
为false
)。parse
(String text, ParsePosition status) 从输入文本中解析数字。static final double
previousDouble
(double d) 查找小于d
的最大双精度数。void
setChoices
(double[] limits, String[] formats) 设置用于格式化的选择。获取模式。Methods declared in class 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
Methods declared in class java.text.Format
format, formatToCharacterIterator, parseObject
-
Constructor Details
-
ChoiceFormat
基于模式使用限制和相应格式构造对象。- 参数:
-
newPattern
- 新模式字符串 - 抛出:
-
NullPointerException
- 如果newPattern
为null
- 参见:
-
ChoiceFormat
使用限制和相应格式构造对象。- 参数:
-
limits
- 升序排列的限制 -
formats
- 相应的格式字符串 - 抛出:
-
NullPointerException
- 如果limits
或formats
为null
- 参见:
-
-
Method Details
-
applyPattern
设置模式。- 参数:
-
newPattern
- 请参阅类描述。 - 抛出:
-
NullPointerException
- 如果newPattern
为null
-
toPattern
获取模式。- 返回:
- 模式字符串
-
setChoices
设置用于格式化的选择。- 参数:
-
limits
- 包含您希望使用该格式解析的顶部值,并且应按升序排序。在格式化 X 时,选择将是 i,其中 limit[i] ≤ X < limit[i+1]。如果限制数组不是按升序排列的,则格式化的结果将不正确。 -
formats
- 您希望为每个限制使用的格式。 - 抛出:
-
NullPointerException
- 如果limits
或formats
为null
-
getLimits
public double[] getLimits()获取构造函数中传递的限制。- 返回:
- 限制。
-
getFormats
获取构造函数中传递的格式。- 返回:
- 格式。
-
format
格式的特化。此方法实际上调用format(double, StringBuffer, FieldPosition)
,因此支持的长整型范围仅等于可以由双精度数存储的范围。这永远不会是一个实际的限制。- 在类中指定:
-
format
in classNumberFormat
- 参数:
-
number
- 要格式化的长整型数字 -
toAppendTo
- 要附加格式化文本的 StringBuffer -
status
- 跟踪返回字符串中字段的位置。例如,在Locale.US
区域设置中格式化数字123456789
时,如果给定的fieldPosition
是NumberFormat.INTEGER_FIELD
,则fieldPosition
的开始索引和结束索引将分别设置为 0 和 11,用于输出字符串123,456,789
。 - 返回:
- 格式化的 StringBuffer
- 参见:
-
format
返回带有格式化双精度数的模式。- 指定者:
-
format
在类NumberFormat
- 参数:
-
number
- 要格式化和替换的数字。 -
toAppendTo
- 要追加文本的位置。 -
status
- 忽略不返回有用状态。 - 返回:
- 格式化的StringBuffer
- 抛出:
-
NullPointerException
- 如果toAppendTo
为null
- 参见:
-
parse
从输入文本中解析数字。- 指定者:
-
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
的最小double值。如果是NaN
,则返回相同的值。用于创建半开区间。
- 实现注意:
-
这等效于调用
Math.nextUp(d)
- 参数:
-
d
- 参考值 - 返回:
-
大于
d
的最小double值 - 参见:
-
previousDouble
public static final double previousDouble(double d) 找到小于d
的最大double值。如果是NaN
,则返回相同的值。- 实现注意:
-
这等效于调用
Math.nextDown(d)
- 参数:
-
d
- 参考值 - 返回:
-
小于
d
的最大double值 - 参见:
-
clone
重写Cloneable- 重写:
-
clone
在类NumberFormat
- 返回:
- 此实例的克隆。
- 参见:
-
hashCode
public int hashCode()为消息格式对象生成哈希码。- 重写:
-
hashCode
在类NumberFormat
- 返回:
- 此对象的哈希码值。
- 参见:
-
equals
两者之间的相等比较- 重写:
-
equals
在类NumberFormat
- 参数:
-
obj
- 要比较的参考对象。 - 返回:
-
如果此对象与obj参数相同,则为
true
; 否则为false
。 - 参见:
-
nextDouble
public static double nextDouble(double d, boolean positive) 找到大于d
的最小double值(如果positive
为true
),或小于d
的最大double值(如果positive
为false
)。如果是NaN
,则返回相同的值。- 实现注意:
-
这等效于调用
positive ? Math.nextUp(d) : Math.nextDown(d)
- 参数:
-
d
- 参考值 -
positive
- 如果需要最小double值,则为true
; 否则为false
- 返回:
- 最小或最大double值
-