Google is committed to advancing racial equity for Black communities. See how.
Added in API level 1

ChoiceFormat

open class ChoiceFormat : NumberFormat
kotlin.Any
   ↳ java.text.Format
   ↳ java.text.NumberFormat
   ↳ java.text.ChoiceFormat

A 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. If the limit array is not in ascending order, the results of formatting will be incorrect. ChoiceFormat also accepts \u221E as equivalent to infinity(INF).

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,

  • limits = {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 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:

<code>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 &lt;= 8.0; ++i) {
      status.setIndex(0);
      System.out.println(i + " -&gt; " + form.format(i) + " -&gt; "
                               + form.parse(form.format(i),status));
  }
  </code>
Here is a more complex example, with a pattern format:
<code>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 &lt; 4; ++i) {
      testArgs[0] = new Integer(i);
      testArgs[2] = testArgs[0];
      System.out.println(pattform.format(testArgs));
  }
  </code>

Specifying a pattern for ChoiceFormat objects is fairly straightforward. For example:

<code>ChoiceFormat fmt = new ChoiceFormat(
       "-1#is negative| 0#is zero or fraction | 1#is one |1.0&lt;is 1+ |2#is two |2&lt;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));
  </code>
And the output result would be like the following:
<code>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.
  </code>

Synchronization

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.

Summary

Inherited constants

Public constructors

<init>(newPattern: String!)

Constructs with limits and corresponding formats based on the pattern.

<init>(limits: DoubleArray!, formats: Array<String!>!)

Constructs with the limits and the corresponding formats.

Public methods

open Unit
applyPattern(newPattern: String!)

Sets the pattern.

open Any

Overrides Cloneable

open Boolean
equals(other: Any?)

Equality comparision between two

open StringBuffer
format(number: Long, toAppendTo: StringBuffer, status: FieldPosition)

Specialization of format.

open StringBuffer
format(number: Double, toAppendTo: StringBuffer, status: FieldPosition)

Returns pattern with formatted double.

open Array<Any!>!

open DoubleArray!

open Int

Generates a hash code for the message format object.

static Double

Finds the least double greater than d.

open static Double
nextDouble(d: Double, positive: Boolean)

Finds the least double greater than d (if positive is true), or the greatest double less than d (if positive is false).

open Number?
parse(text: String, status: ParsePosition)

Parses a Number from the input text.

static Double

Finds the greatest double less than d.

open Unit
setChoices(limits: DoubleArray!, formats: Array<String!>!)

Set the choices to be used in formatting.

open String!

Gets the pattern.

Inherited functions

Public constructors

<init>

Added in API level 1
ChoiceFormat(newPattern: String!)

Constructs with limits and corresponding formats based on the pattern.

Parameters
newPattern String!: the new pattern string

See Also

<init>

Added in API level 1
ChoiceFormat(
    limits: DoubleArray!,
    formats: Array<String!>!)

Constructs with the limits and the corresponding formats.

Parameters
limits DoubleArray!: limits in ascending order
formats Array<String!>!: corresponding format strings

See Also

Public methods

applyPattern

Added in API level 1
open fun applyPattern(newPattern: String!): Unit

Sets the pattern.

Parameters
newPattern String!: See the class description.

clone

Added in API level 1
open fun clone(): Any

Overrides Cloneable

Return
Any a clone of this instance.
Exceptions
java.lang.CloneNotSupportedException if the object's class does not support the Cloneable interface. Subclasses that override the clone method can also throw this exception to indicate that an instance cannot be cloned.

equals

Added in API level 1
open fun equals(other: Any?): Boolean

Equality comparision between two

Parameters
obj the reference object with which to compare.
Return
Boolean true if this object is the same as the obj argument; false otherwise.

format

Added in API level 1
open fun format(
    number: Long,
    toAppendTo: StringBuffer,
    status: FieldPosition
): StringBuffer

Specialization of format. This method really calls 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.

Parameters
number Long: the long number to format
toAppendTo StringBuffer: the StringBuffer to which the formatted text is to be appended
pos the field position
Return
StringBuffer the formatted StringBuffer

format

Added in API level 1
open fun format(
    number: Double,
    toAppendTo: StringBuffer,
    status: FieldPosition
): StringBuffer

Returns pattern with formatted double.

Parameters
number Double: number to be formatted and substituted.
toAppendTo StringBuffer: where text is appended.
pos the field position
status FieldPosition: ignore no useful status is returned.
Return
StringBuffer the formatted StringBuffer

getFormats

Added in API level 1
open fun getFormats(): Array<Any!>!
Return
Array<Any!>! a copy of the String[] array supplied to the constructor or the most recent call to setChoices(double[],java.lang.String[]).

getLimits

Added in API level 1
open fun getLimits(): DoubleArray!
Return
DoubleArray! a copy of the double[] array supplied to the constructor or the most recent call to setChoices(double[],java.lang.String[]).

hashCode

Added in API level 1
open fun hashCode(): Int

Generates a hash code for the message format object.

Return
Int a hash code value for this object.

nextDouble

Added in API level 1
static fun nextDouble(d: Double): Double

Finds the least double greater than d. If NaN, returns same value.

Used to make half-open intervals.

Parameters
d Double: the reference value
Return
Double the least double value greather than d

See Also

nextDouble

Added in API level 1
open static fun nextDouble(
    d: Double,
    positive: Boolean
): Double

Finds the least double greater than d (if positive is true), or the greatest double less than d (if positive is false). If NaN, returns same value. Does not affect floating-point flags, provided these member functions do not: Double.longBitsToDouble(long) Double.doubleToLongBits(double) Double.isNaN(double)

Parameters
d Double: the reference value
positive Boolean: true if the least double is desired; false otherwise
Return
Double the least or greater double value

parse

Added in API level 1
open fun parse(
    text: String,
    status: ParsePosition
): Number?

Parses a Number from the input text.

Parameters
source the String to parse
parsePosition the parse position
text String: the source text.
status ParsePosition: an input-output parameter. On input, the status.index field indicates the first character of the source text that should be parsed. On exit, if no error occurred, status.index is set to the first unparsed character in the source text. On exit, if an error did occur, status.index is unchanged and status.errorIndex is set to the first index of the character that caused the parse to fail.
Return
Number? A Number representing the value of the number parsed.

previousDouble

Added in API level 1
static fun previousDouble(d: Double): Double

Finds the greatest double less than d. If NaN, returns same value.

Parameters
d Double: the reference value
Return
Double the greatest double value less than d

See Also

setChoices

Added in API level 1
open fun setChoices(
    limits: DoubleArray!,
    formats: Array<String!>!
): Unit

Set the choices to be used in formatting.

Parameters
limits DoubleArray!: contains the top value that you want parsed with that format, and should be in ascending sorted order. When formatting X, the choice will be the i, where limit[i] ≤ X < limit[i+1]. If the limit array is not in ascending order, the results of formatting will be incorrect.
formats Array<String!>!: are the formats you want to use for each limit. They can be either Format objects or Strings. When formatting with object Y, if the object is a NumberFormat, then ((NumberFormat) Y).format(X) is called. Otherwise Y.toString() is called.

toPattern

Added in API level 1
open fun toPattern(): String!

Gets the pattern.

Return
String! the pattern string