All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object
|
+----java.text.Format
|
+----java.text.NumberFormat
|
+----java.text.ChoiceFormat
ChoiceFormat
allows you to attach a format to a range of numbers.
It is generally used in a MessageFormat
for handling plurals.
The choice is specified with an ascending list of doubles, where each item
specifies a half-open interval up to the next item:
X matches j if and only if limit[j] <= X < limit[j+1]
If there is no match, then either the first or last index is used, depending
on whether the number (X) is too low or too high.
Note:
ChoiceFormat
differs from the other Format
classes in that you create a ChoiceFormat
object with a
constructor (not with a getInstance
style factory
method). The factory methods aren't necessary because ChoiceFormat
doesn't require any complex setup for a given locale. In fact,
ChoiceFormat
doesn't implement any locale specific behavior.
When creating a ChoiceFormat
, you must specify an array of formats
and an array of limits. The length of these arrays must be the same.
For example,
nextDouble
can be used to get the next higher double, to
make the half-open interval.)
Here is a simple example that shows formatting and parsing:
double[] limits = {1,2,3,4,5,6,7};
String[] monthNames = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
ChoiceFormat form = new ChoiceFormat(limits, monthNames);
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));
}
Here is a more complex example, with a pattern format:
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));
}
public ChoiceFormat(String newPattern)
public ChoiceFormat(double limits[],
String formats[])
public void applyPattern(String newPattern)
public String toPattern()
public void setChoices(double limits[],
String formats[])
public double[] getLimits()
public Object[] getFormats()
public StringBuffer format(long number,
StringBuffer toAppendTo,
FieldPosition status)
format(double, StringBuffer, FieldPosition)
thus the range of longs that are supported is only equal to
the range that can be stored by double. This will never be
a practical limitation.
public StringBuffer format(double number,
StringBuffer toAppendTo,
FieldPosition status)
public Number parse(String text,
ParsePosition status)
public static final double nextDouble(double d)
Used to make half-open intervals.
public static final double previousDouble(double d)
public Object clone()
public int hashCode()
public boolean equals(Object obj)
public static double nextDouble(double d,
boolean positive)
All Packages Class Hierarchy This Package Previous Next Index