Package mondrian.util
Class Format
- java.lang.Object
-
- mondrian.util.Format
-
public class Format extends Object
Format
formats numbers, strings and dates according to the same specification as Visual Basic'sformat()
function. This function is described in more detail here. We have made the following enhancements to this specification:- if the international currency symbol (¤) occurs in a format string, it is translated to the locale's currency symbol.
- the format string "Currency" is translated to the locale's currency format string. Negative currency values appear in parentheses.
- the string "USD" (abbreviation for U.S. Dollars) may occur in a format string.
One format object can be used to format multiple values, thereby amortizing the time required to parse the format string. Example:
double[] values; Format format = new Format("##,##0.###;(##,##0.###);;Nil"); for (int i = 0; i < values.length; i++) { System.out.println("Value #" + i + " is " + format.format(values[i])); }
Still to be implemented:
- String formatting (fill from left/right)
- Use client's timezone for printing times.
- Author:
- jhyde
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
Format.AlternateFormat
AlternateFormat is an implementation ofFormat.BasicFormat
which allows a different format to be used for different kinds of values.(package private) static class
Format.BasicFormat
BasicFormat is the interface implemented by the classes which do all the work.(package private) static class
Format.CompoundFormat
CompoundFormat is an implementation ofFormat.BasicFormat
where each value is formatted by applying a sequence of format elements.(package private) static class
Format.DateFormat
DateFormat is an element of aFormat.CompoundFormat
which has a value when applied to aCalendar
object.(package private) static class
Format.FallbackFormat
FallbackFormat catches un-handled datatypes and prints the original format string.static class
Format.FormatLocale
A FormatLocale contains all information necessary to format objects based upon the locale of the end-user.(package private) static class
Format.JavaFormat
JavaFormat is an implementation ofFormat.BasicFormat
which prints values using Java's default formatting for their type.(package private) static class
Format.LiteralFormat
LiteralFormat is an implementation ofFormat.BasicFormat
which prints a constant value, regardless of the value to be formatted.(package private) static class
Format.NumericFormat
NumericFormat is an implementation ofFormat.BasicFormat
which prints numbers with a given number of decimal places, leading zeroes, in exponential notation, etc.(package private) static class
Format.Token
-
Field Summary
Fields Modifier and Type Field Description static int
CacheLimit
Maximum number of entries in the format cache used byget(String, java.util.Locale)
.(package private) static String
currencyFormat_en
(package private) static String
currencySymbol_en
(package private) static String
dateSeparator_en
(package private) static String[]
daysOfWeekLong_en
(package private) static String[]
daysOfWeekShort_en
(package private) static char
decimalPlaceholder_en
(package private) static char
intlCurrencySymbol
(package private) static int
LEFT_OF_POINT
(package private) static Format.FormatLocale
locale_US
Locale for US English, also the default for English and for all locales.(package private) static String[]
monthsLong_en
(package private) static String[]
monthsShort_en
(package private) static int
NOT_IN_A_NUMBER
(package private) static int
RIGHT_OF_EXP
(package private) static int
RIGHT_OF_POINT
(package private) static char
thousandSeparator_en
(package private) static String
timeSeparator_en
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static Format.FormatLocale
createLocale(char thousandSeparator, char decimalPlaceholder, String dateSeparator, String timeSeparator, String currencySymbol, String currencyFormat, String[] daysOfWeekShort, String[] daysOfWeekLong, String[] monthsShort, String[] monthsLong, Locale locale)
Create aFormat.FormatLocale
object characterized by the given properties.static Format.FormatLocale
createLocale(Locale locale)
String
format(Object o)
(package private) static int
formatFd2(MondrianFloatingDecimal fd, char[] result, int i, int minDigitsLeftOfDecimal, char decimalChar, int minDigitsRightOfDecimal, int maxDigitsRightOfDecimal, char thousandChar, boolean useDecimal, ArrayStack<Integer> thousandSeparatorPositions)
static Format
get(String formatString, Locale locale)
Constructs aFormat
in a specific locale, or retrieves one from the cache if one already exists.static Format.FormatLocale
getBestFormatLocale(Locale locale)
Returns the bestFormat.FormatLocale
for a givenLocale
.static Format.FormatLocale
getFormatLocale(Locale locale)
Returns theFormat.FormatLocale
which precisely matchesLocale
, if any, or null if there is none.String
getFormatString()
static String
getFormatToken(int code)
Returns the format token as a string representation which corresponds to a given token code.static List<Format.Token>
getTokenList()
static Format.FormatLocale
registerFormatLocale(Format.FormatLocale formatLocale, Locale locale)
Registers aFormat.FormatLocale
to a givenLocale
.
-
-
-
Field Detail
-
CacheLimit
public static final int CacheLimit
Maximum number of entries in the format cache used byget(String, java.util.Locale)
.- See Also:
- Constant Field Values
-
thousandSeparator_en
static final char thousandSeparator_en
- See Also:
- Constant Field Values
-
decimalPlaceholder_en
static final char decimalPlaceholder_en
- See Also:
- Constant Field Values
-
dateSeparator_en
static final String dateSeparator_en
- See Also:
- Constant Field Values
-
timeSeparator_en
static final String timeSeparator_en
- See Also:
- Constant Field Values
-
currencySymbol_en
static final String currencySymbol_en
- See Also:
- Constant Field Values
-
currencyFormat_en
static final String currencyFormat_en
- See Also:
- Constant Field Values
-
daysOfWeekShort_en
static final String[] daysOfWeekShort_en
-
daysOfWeekLong_en
static final String[] daysOfWeekLong_en
-
monthsShort_en
static final String[] monthsShort_en
-
monthsLong_en
static final String[] monthsLong_en
-
intlCurrencySymbol
static final char intlCurrencySymbol
- See Also:
- Constant Field Values
-
locale_US
static final Format.FormatLocale locale_US
Locale for US English, also the default for English and for all locales.
-
NOT_IN_A_NUMBER
static final int NOT_IN_A_NUMBER
- See Also:
- Constant Field Values
-
LEFT_OF_POINT
static final int LEFT_OF_POINT
- See Also:
- Constant Field Values
-
RIGHT_OF_POINT
static final int RIGHT_OF_POINT
- See Also:
- Constant Field Values
-
RIGHT_OF_EXP
static final int RIGHT_OF_EXP
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Format
public Format(String formatString, Locale locale)
Constructs aFormat
in a specific locale.- Parameters:
formatString
- the format string; see this description for more detailslocale
- The locale
-
Format
public Format(String formatString, Format.FormatLocale locale)
Constructs aFormat
in a specific locale.- Parameters:
formatString
- the format string; see this description for more detailslocale
- The locale- See Also:
Format.FormatLocale
,createLocale(char, char, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String[], java.lang.String[], java.lang.String[], java.util.Locale)
-
-
Method Detail
-
getTokenList
public static List<Format.Token> getTokenList()
-
getFormatToken
public static String getFormatToken(int code)
Returns the format token as a string representation which corresponds to a given token code.- Parameters:
code
- The code of the token to obtain.- Returns:
- The string representation of that token.
-
get
public static Format get(String formatString, Locale locale)
Constructs aFormat
in a specific locale, or retrieves one from the cache if one already exists.If the number of entries in the cache exceeds
CacheLimit
, replaces the eldest entry in the cache.- Parameters:
formatString
- the format string; see this description for more details- Returns:
- format for given format string in given locale
-
createLocale
public static Format.FormatLocale createLocale(char thousandSeparator, char decimalPlaceholder, String dateSeparator, String timeSeparator, String currencySymbol, String currencyFormat, String[] daysOfWeekShort, String[] daysOfWeekLong, String[] monthsShort, String[] monthsLong, Locale locale)
Create aFormat.FormatLocale
object characterized by the given properties.- Parameters:
thousandSeparator
- the character used to separate thousands in numbers, or ',' by default. For example, 12345 is '12,345 in English, '12.345 in French.decimalPlaceholder
- the character placed between the integer and the fractional part of decimal numbers, or '.' by default. For example, 12.34 is '12.34' in English, '12,34' in French.dateSeparator
- the character placed between the year, month and day of a date such as '12/07/2001', or '/' by default.timeSeparator
- the character placed between the hour, minute and second value of a time such as '1:23:45 AM', or ':' by default.daysOfWeekShort
- Short forms of the days of the week. The array is 1-based, because positionCalendar.SUNDAY
(= 1) must hold Sunday, etc. The array must have 8 elements. For example {"", "Sun", "Mon", ..., "Sat"}.daysOfWeekLong
- Long forms of the days of the week. The array is 1-based, because positionCalendar.SUNDAY
must hold Sunday, etc. The array must have 8 elements. For example {"", "Sunday", ..., "Saturday"}.monthsShort
- Short forms of the months of the year. The array is 0-based, because positionCalendar.JANUARY
(= 0) holds January, etc. For example {"Jan", ..., "Dec", ""}.monthsLong
- Long forms of the months of the year. The array is 0-based, because positionCalendar.JANUARY
(= 0) holds January, etc. For example {"January", ..., "December", ""}.locale
- if this is not null, register that the constructedFormatLocale
is the default forlocale
-
createLocale
public static Format.FormatLocale createLocale(Locale locale)
-
getFormatLocale
public static Format.FormatLocale getFormatLocale(Locale locale)
Returns theFormat.FormatLocale
which precisely matchesLocale
, if any, or null if there is none.
-
getBestFormatLocale
public static Format.FormatLocale getBestFormatLocale(Locale locale)
Returns the bestFormat.FormatLocale
for a givenLocale
. Never returns null, even iflocale
is null.
-
registerFormatLocale
public static Format.FormatLocale registerFormatLocale(Format.FormatLocale formatLocale, Locale locale)
Registers aFormat.FormatLocale
to a givenLocale
. Returns the previous mapping.
-
getFormatString
public String getFormatString()
-
formatFd2
static int formatFd2(MondrianFloatingDecimal fd, char[] result, int i, int minDigitsLeftOfDecimal, char decimalChar, int minDigitsRightOfDecimal, int maxDigitsRightOfDecimal, char thousandChar, boolean useDecimal, ArrayStack<Integer> thousandSeparatorPositions)
-
-