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,
Here is a simple example that shows formatting and parsing: 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)); } 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)); }
Specifying a pattern for ChoiceFormat objects is fairly straightforward. For example: 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)); And the output result would be like the following: 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.
Choice formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
| ChoiceFormat(double[] limits,
String[] formats)
Constructs with the limits and the corresponding formats.
|
| ChoiceFormat(String newPattern)
Constructs with limits and corresponding formats based on the pattern.
|
| void | applyPattern(String newPattern)
Sets the pattern.
|
| Object | clone()
Overrides Cloneable
|
| boolean | equals(Object obj)
Equality comparision between two
|
| StringBuffer | format(double number,
StringBuffer toAppendTo,
FieldPosition status)
Returns pattern with formatted double.
|
| StringBuffer | format(long number,
StringBuffer toAppendTo,
FieldPosition status)
Specialization of format.
|
| Object[] | getFormats()
Get the formats passed in the constructor.
|
| double[] | getLimits()
Get the limits passed in the constructor.
|
| int | hashCode()
Generates a hash code for the message format object.
|
| static double | nextDouble(double d)
Finds the least double greater than d.
|
| static double | nextDouble(double d,
boolean positive)
Finds the least double greater than d (if positive == true),
or the greatest double less than d (if positive == false).
|
| Number | parse(String text,
ParsePosition status)
Parses a Number from the input text.
|
| static double | previousDouble(double d)
Finds the greatest double less than d.
|
| void | setChoices(double[] limits,
String[] formats)
Set the choices to be used in formatting.
|
| String | toPattern()
Gets the pattern.
|
Used to make half-open intervals.
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
Scripting on this page tracks web page traffic, but does not change the content in any way.