public class ChoiceFormat extends NumberFormat
ChoiceFormat
允许您将格式附加到一系列数字。
它通常用于MessageFormat
用于处理复数。
该选项用升序列表双精度指定,其中每个项目指定直到下一个项目的半开间隔:
如果没有匹配,则使用第一个或最后一个索引,这取决于数字(X)是否太低或太高。 如果限制数组不是按升序排列,格式化结果将不正确。 ChoiceFormat也接受X matches j if and only if limit[j] ≤ X < limit[j+1]
\u221E
等效于无限远(INF)。
注意: ChoiceFormat
与其他Format
类别不同之处在于,您将使用ChoiceFormat
函数(不带getInstance
样式工厂方法)创建一个ChoiceFormat
对象。 工厂方法不是必需的,因为ChoiceFormat
不需要为给定的区域设置任何复杂的设置。 实际上, ChoiceFormat
没有实现任何区域设置的具体行为。
创建ChoiceFormat
时,必须指定格式数组和限制数组。 这些数组的长度必须相同。 例如,
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.
选择格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
DecimalFormat
, MessageFormat
, Serialized Form
NumberFormat.Field
FRACTION_FIELD, INTEGER_FIELD
Constructor and Description |
---|
ChoiceFormat(double[] limits, String[] formats)
具有限制和相应格式的构造。
|
ChoiceFormat(String newPattern)
基于模式的限制和相应格式的构造。
|
Modifier and Type | Method and Description |
---|---|
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 。
|
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()
获得模式。
|
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
format, formatToCharacterIterator, parseObject
public ChoiceFormat(String newPattern)
newPattern
- 新的模式字符串
applyPattern(java.lang.String)
public ChoiceFormat(double[] limits, String[] formats)
limits
-
limits
限制
formats
- 相应的格式字符串
setChoices(double[], java.lang.String[])
public void applyPattern(String newPattern)
newPattern
- 查看课程说明。
public String toPattern()
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()。
public double[] getLimits()
public Object[] getFormats()
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition status)
format(double, StringBuffer, FieldPosition)
所以支持的format(double, StringBuffer, FieldPosition)
的范围只等于可以被double存储的范围。
这绝对不是实际的限制。
format
在
NumberFormat
number
- 长编号格式
toAppendTo
- 要附加格式化文本的StringBuffer
status
- 现场位置
Format.format(java.lang.Object)
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition status)
format
在
NumberFormat
number
- 要格式化和替换的号码。
toAppendTo
- 附加文本。
status
- 忽略没有返回有用的状态。
Format.format(java.lang.Object)
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)
public static final double nextDouble(double d)
d
。
如果NaN
,返回相同的值。
用于制作半开间隔。
d
- 参考值
d
previousDouble(double)
public static final double previousDouble(double d)
d
。
如果NaN
,返回相同的值。
d
- 参考值
d
nextDouble(double)
public Object clone()
clone
在
NumberFormat
Cloneable
public int hashCode()
hashCode
在
NumberFormat
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
equals
在
NumberFormat
obj
- 用于比较的参考对象。
true
如果此对象与obj参数相同;
false
否则。
Object.hashCode()
, HashMap
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
否则