- 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]
\u221E
等同于无穷大(INF)。注意:
ChoiceFormat
与其他Format
类的不同之处在于,您使用构造函数(不使用getInstance
样式工厂方法)创建ChoiceFormat
对象。 工厂方法不是必需的,因为ChoiceFormat
对于给定的语言环境不需要任何复杂的设置。 实际上,ChoiceFormat
没有实现任何特定于语言环境的行为。创建
ChoiceFormat
,必须指定格式数组和限制数组。 这些数组的长度必须相同。 例如,- 限制 = {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] = 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
-
-
嵌套类汇总
-
嵌套类/接口声明在类 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()
覆盖Cloneableboolean
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
。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
双倍小于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
-
-
-
-
构造方法详细信息
-
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]。 如果限制数组不按升序排列,则格式化结果将不正确。 -
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)
因此支持的long的范围仅等于double可以存储的范围。 这绝不是一个实际的限制。- Specified by:
-
format
在课程NumberFormat
- 参数
-
number
- 要格式化的长数字 -
toAppendTo
- 要附加格式化文本的StringBuffer -
status
- 跟踪返回字符串中字段的位置。 例如,要格式化Locale.US
语言环境中的数字123456789
,如果给定的fieldPosition
是NumberFormat.INTEGER_FIELD
,则对于输出字符串123,456,789
,开始索引和结束索引fieldPosition
将分别设置为0和11。 - 结果
- 格式化的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
双倍小于d
。 如果是NaN
,则返回相同的值。- 参数
-
d
- 参考值 - 结果
-
最大双值小于
d
- 另请参见:
-
nextDouble(double)
-
clone
public Object clone()
覆盖Cloneable- 重写:
-
clone
in classNumberFormat
- 结果
- 这个实例的克隆。
- 另请参见:
-
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
- 结果
- 最小或更大的双重值
-
-