- java.lang.Object
-
- java.text.Format
-
- java.text.NumberFormat
-
- java.text.ChoiceFormat
-
- All Implemented Interfaces:
-
Serializable
,Cloneable
public class ChoiceFormat extends NumberFormat
AChoiceFormat
允许您将格式附加到一系列数字。 它通常用于处理复数的MessageFormat
中。 该选项用升序列表双精度指定,其中每个项目指定直到下一个项目的半开间隔:X matches j if and only if limit[j] ≤ X < limit[j+1]
\u221E
等效于无限远(INF)。注意:
ChoiceFormat
与其他Format
类别不同之处在于您使用构造函数(不是使用getInstance
样式工厂方法)创建一个ChoiceFormat
对象。 工厂方法不是必需的,因为ChoiceFormat
不需要为给定的区域设置任何复杂的设置。 实际上,ChoiceFormat
没有实现任何区域设置的具体行为。创建
ChoiceFormat
,必须指定格式数组和限制数组。 这些数组的长度必须相同。 例如,- 极限 = {1,2,3,4,5,6,7}
格式 = {“太阳”,“星期一”,“星期二”,“星期三”,“星期三”,“星期五”,“星期六” - 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] = 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.
Synchronization
选择格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
- 从以下版本开始:
- 1.1
- 另请参见:
-
DecimalFormat
,MessageFormat
, Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class java.text.NumberFormat
NumberFormat.Field
-
-
Field Summary
-
Fields inherited from class java.text.NumberFormat
FRACTION_FIELD, INTEGER_FIELD
-
-
构造方法摘要
构造方法 Constructor 描述 ChoiceFormat(double[] limits, String[] formats)
具有限制和相应格式的构造。ChoiceFormat(String newPattern)
基于模式的限制和相应格式的构造。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
applyPattern(String newPattern)
设置模式。Object
clone()
覆盖可克隆boolean
equals(Object obj)
两者之间的平等比较StringBuffer
format(double number, StringBuffer toAppendTo, FieldPosition status)
返回格式为double的模式。StringBuffer
format(long number, StringBuffer toAppendTo, FieldPosition status)
专业化格式。Object[]
getFormats()
获取在构造函数中传递的格式。double[]
getLimits()
获取构造函数中传递的限制。int
hashCode()
生成消息格式对象的哈希码。static double
nextDouble(double d)
找到的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()
获得模式。-
Methods inherited from class java.text.Format
format, formatToCharacterIterator, parseObject
-
Methods inherited from class 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
-
-
-
-
构造方法详细信息
-
ChoiceFormat
public ChoiceFormat(String newPattern)
基于模式的限制和相应格式的构造。- 参数
-
newPattern
- 新的模式字符串 - 异常
-
NullPointerExcpetion
- 如果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]。 如果限制数组不是按升序排列,格式化结果将不正确。 -
formats
- 是您要为每个限制使用的格式。 它们可以是格式对象或字符串。 当使用对象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)
因此所支持的longs的范围只等于可以通过double存储的范围。 这绝对不是实际的限制。- Specified by:
-
format
中的NumberFormat
- 参数
-
number
- 长数字格式 -
toAppendTo
- 要附加格式化文本的StringBuffer -
status
- 字段位置 - 结果
- 格式化的StringBuffer
- 另请参见:
-
Format.format(java.lang.Object)
-
format
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
返回格式为double的模式。- Specified by:
-
format
在NumberFormat
- 参数
-
number
- 要格式化和替换的数字。 -
toAppendTo
- 附加文本。 -
status
- 忽略没有返回有用的状态。 - 结果
- 格式化的StringBuffer
- 异常
-
NullPointerException
- 如果toAppendTo
是null
- 另请参见:
-
Format.format(java.lang.Object)
-
parse
public Number parse(String text, ParsePosition status)
从输入文本中解析一个数字。- Specified by:
-
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)
找到的最小双数大于d
。 如果是NaN
,返回相同的值。用于制作半开间隔。
- 参数
-
d
- 参考值 - 结果
-
最小双重值超过
d
- 另请参见:
-
previousDouble(double)
-
previousDouble
public static final double previousDouble(double d)
发现最大的双倍小于d
。 如果是NaN
,返回相同的值。- 参数
-
d
- 参考值 - 结果
-
最大双倍值小于
d
- 另请参见:
-
nextDouble(double)
-
clone
public Object clone()
覆盖可克隆- 重写:
-
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)
发现最少的双倍大于d
(如果positive
是true
),或最大的双倍小于d
(如果positive
是false
)。 如果是NaN
,返回相同的值。 不影响浮点标志,只要这些成员函数不会:Double.longBitsToDouble(long)Double.doubleToLongBits(double)Double.isNaN(double)- 参数
-
d
- 参考值 -
positive
-true
如果需要最小双倍; 否则为false
- 结果
- 最小或更大的双重值
-
-