Top Description Fields Constructors Methods
com.ibm.icu.text

public Class RuleBasedNumberFormat

extends NumberFormat
Class Inheritance
Imports
java.math.BigInteger, java.text.FieldPosition, .ParsePosition, java.util.Arrays, .HashMap, .Locale, .Map, .MissingResourceException, .Set, com.ibm.icu.impl.ICUData, .ICUDebug, .ICUResourceBundle, .PatternProps, com.ibm.icu.lang.UCharacter, com.ibm.icu.math.BigDecimal, com.ibm.icu.util.ULocale, .ULocale.Category, .UResourceBundle, .UResourceBundleIterator

A class that formats numbers according to a set of rules. This number formatter is typically used for spelling out numeric values in words (e.g., 25,3476 as "twenty-five thousand three hundred seventy-six" or "vingt-cinq mille trois cents soixante-seize" or "funfundzwanzigtausenddreihundertsechsundsiebzig"), but can also be used for other complicated formatting tasks, such as formatting a number of seconds as hours, minutes and seconds (e.g., 3,730 as "1:02:10").

The resources contain three predefined formatters for each locale: spellout, which spells out a value in words (123 is "one hundred twenty-three"); ordinal, which appends an ordinal suffix to the end of a numeral (123 is "123rd"); and duration, which shows a duration in seconds as hours, minutes, and seconds (123 is "2:03").  The client can also define more specialized RuleBasedNumberFormats by supplying programmer-defined rule sets.

The behavior of a RuleBasedNumberFormat is specified by a textual description that is either passed to the constructor as a String or loaded from a resource bundle. In its simplest form, the description consists of a semicolon-delimited list of rules. Each rule has a string of output text and a value or range of values it is applicable to. In a typical spellout rule set, the first twenty rules are the words for the numbers from 0 to 19:

zero; one; two; three; four; five; six; seven; eight; nine;
ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen;

For larger numbers, we can use the preceding set of rules to format the ones place, and we only have to supply the words for the multiples of 10:

20: twenty[->>];
30: thirty{->>];
40: forty[->>];
50: fifty[->>];
60: sixty[->>];
70: seventy[->>];
80: eighty[->>];
90: ninety[->>];

In these rules, the base value is spelled out explicitly and set off from the rule's output text with a colon. The rules are in a sorted list, and a rule is applicable to all numbers from its own base value to one less than the next rule's base value. The ">>" token is called a substitution and tells the formatter to isolate the number's ones digit, format it using this same set of rules, and place the result at the position of the ">>" token. Text in brackets is omitted if the number being formatted is an even multiple of 10 (the hyphen is a literal hyphen; 24 is "twenty-four," not "twenty four").

For even larger numbers, we can actually look up several parts of the number in the list:

100: << hundred[ >>];

The "<<" represents a new kind of substitution. The << isolates the hundreds digit (and any digits to its left), formats it using this same rule set, and places the result where the "<<" was. Notice also that the meaning of >> has changed: it now refers to both the tens and the ones digits. The meaning of both substitutions depends on the rule's base value. The base value determines the rule's divisor, which is the highest power of 10 that is less than or equal to the base value (the user can change this). To fill in the substitutions, the formatter divides the number being formatted by the divisor. The integral quotient is used to fill in the << substitution, and the remainder is used to fill in the >> substitution. The meaning of the brackets changes similarly: text in brackets is omitted if the value being formatted is an even multiple of the rule's divisor. The rules are applied recursively, so if a substitution is filled in with text that includes another substitution, that substitution is also filled in.

This rule covers values up to 999, at which point we add another rule:

1000: << thousand[ >>];

Again, the meanings of the brackets and substitution tokens shift because the rule's base value is a higher power of 10, changing the rule's divisor. This rule can actually be used all the way up to 999,999. This allows us to finish out the rules as follows:

1,000,000: << million[ >>];
1,000,000,000: << billion[ >>];
1,000,000,000,000: << trillion[ >>];
1,000,000,000,000,000: OUT OF RANGE!;

Commas, periods, and spaces can be used in the base values to improve legibility and are ignored by the rule parser. The last rule in the list is customarily treated as an "overflow rule," applying to everything from its base value on up, and often (as in this example) being used to print out an error message or default representation. Notice also that the size of the major groupings in large numbers is controlled by the spacing of the rules: because in English we group numbers by thousand, the higher rules are separated from each other by a factor of 1,000.

To see how these rules actually work in practice, consider the following example: Formatting 25,430 with this rule set would work like this:

<< thousand >> [the rule whose base value is 1,000 is applicable to 25,340]
twenty->> thousand >> [25,340 over 1,000 is 25. The rule for 20 applies.]
twenty-five thousand >> [25 mod 10 is 5. The rule for 5 is "five."
twenty-five thousand << hundred >> [25,340 mod 1,000 is 340. The rule for 100 applies.]
twenty-five thousand three hundred >> [340 over 100 is 3. The rule for 3 is "three."]
twenty-five thousand three hundred forty [340 mod 100 is 40. The rule for 40 applies. Since 40 divides evenly by 10, the hyphen and substitution in the brackets are omitted.]

The above syntax suffices only to format positive integers. To format negative numbers, we add a special rule:

-x: minus >>;

This is called a negative-number rule, and is identified by "-x" where the base value would be. This rule is used to format all negative numbers. the >> token here means "find the number's absolute value, format it with these rules, and put the result here."

We also add a special rule called a fraction rule for numbers with fractional parts:

x.x: << point >>;

This rule is used for all positive non-integers (negative non-integers pass through the negative-number rule first and then through this rule). Here, the << token refers to the number's integral part, and the >> to the number's fractional part. The fractional part is formatted as a series of single-digit numbers (e.g., 123.456 would be formatted as "one hundred twenty-three point four five six").

To see how this rule syntax is applied to various languages, examine the resource data.

There is actually much more flexibility built into the rule language than the description above shows. A formatter may own multiple rule sets, which can be selected by the caller, and which can use each other to fill in their substitutions. Substitutions can also be filled in with digits, using a DecimalFormat object. There is syntax that can be used to alter a rule's divisor in various ways. And there is provision for much more flexible fraction handling. A complete description of the rule syntax follows:


The description of a RuleBasedNumberFormat's behavior consists of one or more rule sets. Each rule set consists of a name, a colon, and a list of rules. A rule set name must begin with a % sign. Rule sets with names that begin with a single % sign are public: the caller can specify that they be used to format and parse numbers. Rule sets with names that begin with %% are private: they exist only for the use of other rule sets. If a formatter only has one rule set, the name may be omitted.

The user can also specify a special "rule set" named %%lenient-parse. The body of %%lenient-parse isn't a set of number-formatting rules, but a RuleBasedCollator description which is used to define equivalences for lenient parsing. For more information on the syntax, see RuleBasedCollator. For more information on lenient parsing, see setLenientParse()

Note

symbols that have syntactic meaning in collation rules, such as '&', have no particular meaning when appearing outside of the lenient-parse rule set.

The body of a rule set consists of an ordered, semicolon-delimited list of rules. Internally, every rule has a base value, a divisor, rule text, and zero, one, or two substitutions. These parameters are controlled by the description syntax, which consists of a rule descriptor, a colon, and a rule body.

A rule descriptor can take one of the following forms (text in italics is the name of a token):

bv: bv specifies the rule's base value. bv is a decimal number expressed using ASCII digits. bv may contain spaces, period, and commas, which are ignored. The rule's divisor is the highest power of 10 less than or equal to the base value.
bv/rad: bv specifies the rule's base value. The rule's divisor is the highest power of rad less than or equal to the base value.
bv>: bv specifies the rule's base value. To calculate the divisor, let the radix be 10, and the exponent be the highest exponent of the radix that yields a result less than or equal to the base value. Every > character after the base value decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix raised to the power of the exponent; otherwise, the divisor is 1.
bv/rad>: bv specifies the rule's base value. To calculate the divisor, let the radix be rad, and the exponent be the highest exponent of the radix that yields a result less than or equal to the base value. Every > character after the radix decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix raised to the power of the exponent; otherwise, the divisor is 1.
-x: The rule is a negative-number rule.
x.x: The rule is an improper fraction rule. If the full stop in the middle of the rule name is replaced with the decimal point that is used in the language or DecimalFormatSymbols, then that rule will have precedence when formatting and parsing this rule. For example, some languages use the comma, and can thus be written as x,x instead. For example, you can use "x.x: << point >>;x,x: << comma >>;" to handle the decimal point that matches the language's natural spelling of the punctuation of either the full stop or comma.
0.x: The rule is a proper fraction rule. If the full stop in the middle of the rule name is replaced with the decimal point that is used in the language or DecimalFormatSymbols, then that rule will have precedence when formatting and parsing this rule. For example, some languages use the comma, and can thus be written as 0,x instead. For example, you can use "0.x: point >>;0,x: comma >>;" to handle the decimal point that matches the language's natural spelling of the punctuation of either the full stop or comma
x.0: The rule is a default rule. If the full stop in the middle of the rule name is replaced with the decimal point that is used in the language or DecimalFormatSymbols, then that rule will have precedence when formatting and parsing this rule. For example, some languages use the comma, and can thus be written as x,0 instead. For example, you can use "x.0: << point;x,0: << comma;" to handle the decimal point that matches the language's natural spelling of the punctuation of either the full stop or comma
Inf: The rule for infinity.
NaN: The rule for an IEEE 754 NaN (not a number).
nothing If the rule's rule descriptor is left out, the base value is one plus the preceding rule's base value (or zero if this is the first rule in the list) in a normal rule set.  In a fraction rule set, the base value is the same as the preceding rule's base value.

A rule set may be either a regular rule set or a fraction rule set, depending on whether it is used to format a number's integral part (or the whole number) or a number's fractional part. Using a rule set to format a rule's fractional part makes it a fraction rule set.

Which rule is used to format a number is defined according to one of the following algorithms: If the rule set is a regular rule set, do the following:

If the rule set is a fraction rule set, do the following:

A rule's body consists of a string of characters terminated by a semicolon. The rule may include zero, one, or two substitution tokens, and a range of text in brackets. The brackets denote optional text (and may also include one or both substitutions). The exact meanings of the substitution tokens, and under what conditions optional text is omitted, depend on the syntax of the substitution token and the context. The rest of the text in a rule body is literal text that is output when the rule matches the number being formatted.

A substitution token begins and ends with a token character. The token character and the context together specify a mathematical operation to be performed on the number being formatted. An optional substitution descriptor specifies how the value resulting from that operation is used to fill in the substitution. The position of the substitution token in the rule body specifies the location of the resultant text in the original rule text.

The meanings of the substitution token characters are as follows:

>> in normal rule Divide the number by the rule's divisor and format the remainder
in negative-number rule Find the absolute value of the number and format the result
in fraction or default rule Isolate the number's fractional part and format it.
in rule in fraction rule set Not allowed.
>>> in normal rule Divide the number by the rule's divisor and format the remainder, but bypass the normal rule-selection process and just use the rule that precedes this one in this rule list.
in all other rules Not allowed.
<< in normal rule Divide the number by the rule's divisor and format the quotient
in negative-number rule Not allowed.
in fraction or default rule Isolate the number's integral part and format it.
in rule in fraction rule set Multiply the number by the rule's base value and format the result.
== in all rule sets Format the number unchanged
[] in normal rule Omit the optional text if the number is an even multiple of the rule's divisor
in negative-number rule Not allowed.
in improper-fraction rule Omit the optional text if the number is between 0 and 1 (same as specifying both an x.x rule and a 0.x rule)
in default rule Omit the optional text if the number is an integer (same as specifying both an x.x rule and an x.0 rule)
in proper-fraction rule Not allowed.
in rule in fraction rule set Omit the optional text if multiplying the number by the rule's base value yields 1.
$(cardinal,plural syntax)$ in all rule sets This provides the ability to choose a word based on the number divided by the radix to the power of the exponent of the base value for the specified locale, which is normally equivalent to the << value. This uses the cardinal plural rules from PluralFormat. All strings used in the plural format are treated as the same base value for parsing.
$(ordinal,plural syntax)$ in all rule sets This provides the ability to choose a word based on the number divided by the radix to the power of the exponent of the base value for the specified locale, which is normally equivalent to the << value. This uses the ordinal plural rules from PluralFormat. All strings used in the plural format are treated as the same base value for parsing.

The substitution descriptor (i.e., the text between the token characters) may take one of three forms:

a rule set name Perform the mathematical operation on the number, and format the result using the named rule set.
a DecimalFormat pattern Perform the mathematical operation on the number, and format the result using a DecimalFormat with the specified pattern.  The pattern must begin with 0 or #.
nothing Perform the mathematical operation on the number, and format the result using the rule set containing the current rule, except:
  • You can't have an empty substitution descriptor with a == substitution.
  • If you omit the substitution descriptor in a >> substitution in a fraction rule, format the result one digit at a time using the rule set containing the current rule.
  • If you omit the substitution descriptor in a << substitution in a rule in a fraction rule set, format the result using the default rule set for this formatter.

Whitespace is ignored between a rule set name and a rule set body, between a rule descriptor and a rule body, or between rules. If a rule body begins with an apostrophe, the apostrophe is ignored, but all text after it becomes significant (this is how you can have a rule's rule text begin with whitespace). There is no escape function: the semicolon is not allowed in rule set names or in rule text, and the colon is not allowed in rule set names. The characters beginning a substitution token are always treated as the beginning of a substitution token.

See the resource data and the demo program for annotated examples of real rule sets using these features.

Author
Richard Gillam
ICU Status
Stable since ICU 2.0.
See Also
NumberFormat, DecimalFormat, PluralFormat, PluralRules

Field Summary

Modifier and TypeField and Description
private transient BreakIterator
private boolean
private boolean
private boolean
capitalizationInfoIsSet

Data for handling context-based capitalization

private static final boolean
private transient DecimalFormat
decimalFormat

The NumberFormat used when lenient parsing numbers.

private transient DecimalFormatSymbols
decimalFormatSymbols

The DecimalFormatSymbols object that any DecimalFormat objects this formatter uses should use.

private transient NFRule
defaultInfinityRule

The rule used when dealing with infinity.

private transient NFRule
defaultNaNRule

The rule used when dealing with IEEE 754 NaN.

private transient NFRuleSet
defaultRuleSet

A pointer to the formatter's default rule set.

public static final int
DURATION

Selector code that tells the constructor to create a duration formatter

private boolean
lenientParse

Flag specifying whether lenient parse mode is on or off.

private transient String
lenientParseRules

If the description specifies lenient-parse rules, they're stored here until the collator is created.

private ULocale
locale

The formatter's locale.

private static final String[]
private transient boolean
private static final BigDecimal
private static final BigDecimal
public static final int
NUMBERING_SYSTEM

Selector code that tells the constructor to create a numbering system formatter

public static final int
ORDINAL

Selector code that tells the constructor to create an ordinal formatter

private transient RBNFPostProcessor
postProcessor

Post processor lazily constructed from the postProcessRules.

private transient String
postProcessRules

If the description specifies post-process rules, they're stored here until post-processing is required.

private String[]
publicRuleSetNames

The public rule set names;

private int
roundingMode

The formatter's rounding mode.

private static final String[]
private Map<String, String[]>
ruleSetDisplayNames

Localizations for rule set names.

private transient NFRuleSet[]
ruleSets

The formatter's rule sets.

private transient Map<String, NFRuleSet>
ruleSetsMap

The formatter's rule names mapped to rule sets.

private transient RbnfLenientScannerProvider
scannerProvider

Collator to be used in lenient parsing.

pack-priv static final long
public static final int
SPELLOUT

Selector code that tells the constructor to create a spellout formatter

Inherited from com.ibm.icu.text.NumberFormat:
ACCOUNTINGCURRENCYSTYLECASHCURRENCYSTYLECURRENCYSTYLEcurrentSerialVersionFRACTION_FIELDINTEGER_FIELDINTEGERSTYLEISOCURRENCYSTYLENUMBERSTYLEPERCENTSTYLEPLURALCURRENCYSTYLESCIENTIFICSTYLESTANDARDCURRENCYSTYLE

Constructor Summary

AccessConstructor and Description
public
RuleBasedNumberFormat(String
A description of the formatter's desired behavior. See the class documentation for a complete explanation of the description syntax.
description
)

Creates a RuleBasedNumberFormat that behaves according to the description passed in. The formatter uses the default FORMAT locale.

public
RuleBasedNumberFormat(String
A description of the formatter's desired behavior. See the class documentation for a complete explanation of the description syntax.
description
,
String[][]
a list of localizations for the rule set names in the description.
localizations
)

Creates a RuleBasedNumberFormat that behaves according to the description passed in. The formatter uses the default FORMAT locale.

public
RuleBasedNumberFormat(String
A description of the formatter's desired behavior. See the class documentation for a complete explanation of the description syntax.
description
,
Locale
A locale, which governs which characters are used for formatting values in numerals, and which characters are equivalent in lenient parsing.
locale
)

Creates a RuleBasedNumberFormat that behaves according to the description passed in. The formatter uses the specified locale to determine the characters to use when formatting in numerals, and to define equivalences for lenient parsing.

public
RuleBasedNumberFormat(String
A description of the formatter's desired behavior. See the class documentation for a complete explanation of the description syntax.
description
,
ULocale
A locale, which governs which characters are used for formatting values in numerals, and which characters are equivalent in lenient parsing.
locale
)

Creates a RuleBasedNumberFormat that behaves according to the description passed in. The formatter uses the specified locale to determine the characters to use when formatting in numerals, and to define equivalences for lenient parsing.

public
RuleBasedNumberFormat(String
A description of the formatter's desired behavior. See the class documentation for a complete explanation of the description syntax.
description
,
String[][]
a list of localizations for the rule set names in the description.
localizations
,
ULocale
A ULocale that governs which characters are used for formatting values in numerals, and determines which characters are equivalent in lenient parsing.
locale
)

Creates a RuleBasedNumberFormat that behaves according to the description passed in. The formatter uses the specified locale to determine the characters to use when formatting in numerals, and to define equivalences for lenient parsing.

public
RuleBasedNumberFormat(Locale
The locale for the formatter.
locale
,
int
A selector code specifying which kind of formatter to create for that locale. There are three legal values: SPELLOUT, which creates a formatter that spells out a value in words in the desired language, ORDINAL, which attaches an ordinal suffix from the desired language to the end of a number (e.g. "123rd"), and DURATION, which formats a duration in seconds as hours, minutes, and seconds.
format
)

Creates a RuleBasedNumberFormat from a predefined description.

public
RuleBasedNumberFormat(ULocale
The locale for the formatter.
locale
,
int
A selector code specifying which kind of formatter to create for that locale. There are four legal values: SPELLOUT, which creates a formatter that spells out a value in words in the desired language, ORDINAL, which attaches an ordinal suffix from the desired language to the end of a number (e.g. "123rd"), DURATION, which formats a duration in seconds as hours, minutes, and seconds, and NUMBERING_SYSTEM, which is used to invoke rules for alternate numbering systems such as the Hebrew numbering system, or for Roman numerals, etc..
format
)

Creates a RuleBasedNumberFormat from a predefined description.

public
RuleBasedNumberFormat(int
A selector code specifying which kind of formatter to create. There are three legal values: SPELLOUT, which creates a formatter that spells out a value in words in the default locale's language, ORDINAL, which attaches an ordinal suffix from the default locale's language to a numeral, and DURATION, which formats a duration in seconds as hours, minutes, and seconds always rounding down. or NUMBERING_SYSTEM, which is used for alternate numbering systems such as Hebrew.
format
)

Creates a RuleBasedNumberFormat from a predefined description.

Method Summary

Modifier and TypeMethod and Description
private String
adjustForContext(String result)

Adjust capitalization of formatted result for display context

public Object

Returns:

A RuleBasedNumberFormat that is equal to this one.
clone
()

Overrides com.ibm.icu.text.NumberFormat.clone.

Duplicates this formatter.
pack-priv PluralFormat
public boolean

Returns:

true if the two formatters have identical behavior.
equals
(Object
The formatter to compare against this one.
that
)

Overrides com.ibm.icu.text.NumberFormat.equals.

Tests two RuleBasedNumberFormats for equality.
private String

Returns:

the special rule text, or null if the rule was not found
extractSpecial
(StringBuilder
the rbnf description with extra whitespace removed
description
,
String
the name of the special rule text to extract
specialName
)

This extracts the special information from the rule sets before the main parsing starts.

pack-priv NFRuleSet

Returns:

The rule set with that name
findRuleSet
(String
The name of the desired rule set
name
)

Returns the named rule set.

public String

Returns:

A textual representation of the number.
format
(double
The number to format.
number
,
String
The name of the rule set to format the number with. This must be the name of a valid public rule set for this formatter.
ruleSet
)

Formats the specified number according to the specified rule set.

public String

Returns:

A textual representation of the number.
format
(long
The number to format.
number
,
String
The name of the rule set to format the number with. This must be the name of a valid public rule set for this formatter.
ruleSet
)

Formats the specified number according to the specified rule set.

public StringBuffer

Returns:

toAppendTo
format
(double
The number to format.
number
,
StringBuffer
A StringBuffer that the result should be appended to.
toAppendTo
,
FieldPosition
This function doesn't examine or update the field position.
ignore
)

Implements abstract com.ibm.icu.text.NumberFormat.format.

Formats the specified number using the formatter's default rule set.
public StringBuffer

Returns:

toAppendTo
format
(long
The number to format.
number
,
StringBuffer
A StringBuffer that the result should be appended to.
toAppendTo
,
FieldPosition
This function doesn't examine or update the field position.
ignore
)

Implements abstract com.ibm.icu.text.NumberFormat.format.

Formats the specified number using the formatter's default rule set.
public StringBuffer
format(BigInteger number, StringBuffer toAppendTo, FieldPosition pos)

Implements abstract com.ibm.icu.text.NumberFormat.format.

NEW Implement com.ibm.icu.text.NumberFormat: Format a BigInteger.
public StringBuffer
format(BigDecimal number, StringBuffer toAppendTo, FieldPosition pos)

Implements abstract com.ibm.icu.text.NumberFormat.format.

NEW Implement com.ibm.icu.text.NumberFormat: Format a BigDecimal.
public StringBuffer
format(BigDecimal number, StringBuffer toAppendTo, FieldPosition pos)

Implements abstract com.ibm.icu.text.NumberFormat.format.

NEW Implement com.ibm.icu.text.NumberFormat: Format a BigDecimal.
private String

Returns:

The text that resulted from formatting the number
format
(double
The number to format
number
,
NFRuleSet
The rule set to use to format the number
ruleSet
)

Bottleneck through which all the public format() methods that take a double pass.

private String

Returns:

The text that resulted from formatting the number
format
(long
The number to format
number
,
NFRuleSet
The rule set to use to format the number
ruleSet
)

Bottleneck through which all the public format() methods that take a long pass.

pack-priv DecimalFormat
pack-priv DecimalFormatSymbols

Returns:

The DecimalFormatSymbols object that should be used by all DecimalFormat instances owned by this formatter.
getDecimalFormatSymbols
()

Returns the DecimalFormatSymbols object that should be used by all DecimalFormat instances owned by this formatter.

pack-priv NFRule
getDefaultInfinityRule()

Returns the default rule for infinity.

pack-priv NFRule
getDefaultNaNRule()

Returns the default rule for NaN.

pack-priv NFRuleSet

Returns:

The formatter's default rule set.
getDefaultRuleSet
()

Returns a reference to the formatter's default rule set.

public String

Returns:

the name of the current default rule set, if it is public, else the empty string.
getDefaultRuleSetName
()

Return the name of the current default rule set.

pack-priv RbnfLenientScanner

Returns:

The collator to use for lenient parsing, or null if lenient parsing is turned off.
getLenientScanner
()

Deprecated as a consequence of RbnfLenientScanner being deprecated.
Returns the scanner to use for lenient parsing.
public RbnfLenientScannerProvider
getLenientScannerProvider()

Deprecated as a consequence of RbnfLenientScannerProvider being deprecated.
Returns the lenient scanner provider.
private String[]
public int

Returns:

A rounding mode, between BigDecimal.ROUND_UP and BigDecimal.ROUND_UNNECESSARY.
getRoundingMode
()

Overrides com.ibm.icu.text.NumberFormat.getRoundingMode.

Returns the rounding mode.
public String

Returns:

the display name for the rule set
getRuleSetDisplayName
(String ruleSetName, ULocale loc)

Return the rule set display name for the provided rule set and locale.

public String

Returns:

the display name for the rule set
getRuleSetDisplayName
(String ruleSetName)

Return the rule set display name for the provided rule set in the current default DISPLAY locale.

public ULocale[]

Returns:

an array of the ULocales for which there is rule set display name information
getRuleSetDisplayNameLocales
()

Return a list of locales for which there are locale-specific display names for the rule sets in this formatter.

public String[]

Returns:

an array of the locales that have display name information
getRuleSetDisplayNames
(ULocale loc)

Return the rule set display names for the provided locale.

public String[]

Returns:

an array of the display names
getRuleSetDisplayNames
()

Return the rule set display names for the current default DISPLAY locale.

public String[]

Returns:

A list of the names of all of this formatter's public rule sets.
getRuleSetNames
()

Returns a list of the names of all of this formatter's public rule sets.

public int
hashCode()

Overrides com.ibm.icu.text.NumberFormat.hashCode.

Returns a hash code value for the object.
private void
init(String
The description of the formatter's desired behavior. This is either passed in by the caller or loaded out of a resource by one of the constructors, and is in the description format specified in the class docs.
description
,
String[][] localizations)

This function parses the description and uses it to build all of internal data structures that the formatter uses to do formatting

private void
initCapitalizationContextInfo(ULocale theLocale)

Set capitalizationForListOrMenu, capitalizationForStandAlone

private void
initLocalizations(String[][] localizations)

Take the localizations array and create a Map from the locale strings to the localization arrays.

public boolean

Returns:

true if lenient-parse mode is turned on.
lenientParseEnabled
()

Returns true if lenient-parse mode is turned on.

public Number

Returns:

The number that corresponds to the parsed text. This will be an instance of either Long or Double, depending on whether the result has a fractional part.
parse
(String
The string to parse
text
,
ParsePosition
On entry, contains the position of the first character in "text" to examine. On exit, has been updated to contain the position of the first character in "text" that wasn't consumed by the parse.
parsePosition
)

Implements abstract com.ibm.icu.text.NumberFormat.parse.

Parses the specified string, beginning at the specified position, according to this formatter's rules.
private void
postProcess(StringBuilder result, NFRuleSet ruleSet)

Post-process the rules if we have a post-processor.

private void
readObject(ObjectInputStream
The stream to read from.
in
)

Hides com.ibm.icu.text.NumberFormat.readObject.

Reads this object in from a stream.
public void
setContext(DisplayContext
The DisplayContext value to set.
context
)

Overrides com.ibm.icu.text.NumberFormat.setContext.

ICU

public void
setDecimalFormatSymbols(DecimalFormatSymbols
desired DecimalFormatSymbols
newSymbols
)

Sets the decimal format symbols used by this formatter.

public void
setDefaultRuleSet(String
the name of the rule set, or null to reset the initial default.
ruleSetName
)

Override the default rule set to use.

public void
setLenientParseMode(boolean
If true, turns lenient-parse mode on; if false, turns it off.
enabled
)

Turns lenient parse mode on and off.

public void
setLenientScannerProvider(RbnfLenientScannerProvider
the provider
scannerProvider
)

Deprecated as a consequence of RbnfLenientScannerProvider being deprecated.
Sets the provider for the lenient scanner.
public void
setRoundingMode(int
A rounding mode, between BigDecimal.ROUND_UP and BigDecimal.ROUND_UNNECESSARY.
roundingMode
)

Overrides com.ibm.icu.text.NumberFormat.setRoundingMode.

Sets the rounding mode.
private StringBuilder

Returns:

The description with all the whitespace that follows semicolons taken out.
stripWhitespace
(String
The formatter description
description
)

This function is used by init() to strip whitespace between rules (i.e., after semicolons).

public String

Returns:

a String containing a rule set that will produce a RuleBasedNumberFormat with identical behavior to this one. This won't necessarily be identical to the rule set description that was originally passed in, but will produce the same result.
toString
()

Overrides java.lang.Object.toString.

Generates a textual description of this formatter.
private void
writeObject(ObjectOutputStream
The stream to write to.
out
)

Hides com.ibm.icu.text.NumberFormat.writeObject.

Writes this object to a stream.
Inherited from com.ibm.icu.text.NumberFormat:
createInstanceformatformatformatformatformatformatformatformatgetAvailableLocalesgetAvailableULocalesgetContextgetCurrencygetCurrencyInstancegetCurrencyInstancegetCurrencyInstancegetEffectiveCurrencygetInstancegetInstancegetInstancegetInstancegetInstancegetInstancegetIntegerInstancegetIntegerInstancegetIntegerInstancegetMaximumFractionDigitsgetMaximumIntegerDigitsgetMinimumFractionDigitsgetMinimumIntegerDigitsgetNumberInstancegetNumberInstancegetNumberInstancegetPatterngetPatterngetPatternForStylegetPatternForStyleAndNumberingSystemgetPercentInstancegetPercentInstancegetPercentInstancegetScientificInstancegetScientificInstancegetScientificInstanceisGroupingUsedisParseIntegerOnlyisParseStrictparseparseCurrencyparseObjectregisterFactorysetCurrencysetGroupingUsedsetMaximumFractionDigitssetMaximumIntegerDigitssetMinimumFractionDigitssetMinimumIntegerDigitssetParseIntegerOnlysetParseStrictunregister