public class Template
extends java.text.MessageFormat
It is extended from MessageFormat
to allow parameters
to be substituted by name as well as by position.
The following example, using MessageFormat, yields "Happy 64th birthday, Ringo!":
MessageFormat f = new MessageFormat("Happy {0,number}th birthday, {1}!");
Object[] args = {64, "Ringo"};
System.out.println(f.format(args);
Here is the same example using a Template and named parameters:
Template f = new Template("Happy {age,number}th birthday, {name}!");
Map<Object, Object> args = new HashMap<Object, Object>();
args.put("age", 64);
args.put("name", "Ringo");
System.out.println(f.format(args);
Using a Template you can also use positional parameters:
Template f = new Template("Happy {age,number}th birthday, {name}!");
Object[] args = {64, "Ringo"};
System.out.println(f.format(args);
Or a hybrid; here, one argument is specified by name, another by position:
Template f = new Template("Happy {age,number}th birthday, {name}!");
Map<Object, Object> args = new HashMap<Object, Object>();
args.put(0, 64);
args.put("name", "Ringo");
System.out.println(f.format(args);
Modifier and Type | Field and Description |
---|---|
private java.util.List<java.lang.String> |
parameterNames |
Modifier | Constructor and Description |
---|---|
private |
Template(java.lang.String pattern,
java.util.List<java.lang.String> parameterNames,
java.util.Locale locale) |
Modifier and Type | Method and Description |
---|---|
java.lang.String |
format(java.util.Map<java.lang.Object,java.lang.Object> argMap)
Formats a set of arguments to produce a string.
|
static java.lang.String |
formatByName(java.lang.String pattern,
java.util.Map<java.lang.Object,java.lang.Object> argMap)
Creates a Template with the given pattern and uses it
to format the given arguments.
|
private java.lang.Object |
getArg(java.util.Map<java.lang.Object,java.lang.Object> argMap,
int ordinal)
Returns the value of the
ordinal th argument. |
java.util.List<java.lang.String> |
getParameterNames()
Returns the names of the parameters, in the order that they appeared in
the template string.
|
private static void |
makeFormat(java.lang.StringBuilder[] segments,
java.util.List<java.lang.String> parameterNames)
Called when a complete parameter has been seen.
|
static Template |
of(java.lang.String pattern)
Creates a Template for the default locale and the
specified pattern.
|
static Template |
of(java.lang.String pattern,
java.util.Locale locale)
Creates a Template for the specified locale and
pattern.
|
private static java.lang.String |
process(java.lang.String pattern,
java.util.List<java.lang.String> parameterNames)
Parses the pattern, populates the parameter names, and returns the
pattern with parameter names converted to parameter ordinals.
|
applyPattern, clone, equals, format, format, format, formatToCharacterIterator, getFormats, getFormatsByArgumentIndex, getLocale, hashCode, parse, parse, parseObject, setFormat, setFormatByArgumentIndex, setFormats, setFormatsByArgumentIndex, setLocale, toPattern
private Template(java.lang.String pattern, java.util.List<java.lang.String> parameterNames, java.util.Locale locale)
public static Template of(java.lang.String pattern)
pattern
- the pattern for this message formatjava.lang.IllegalArgumentException
- if the pattern is invalidpublic static Template of(java.lang.String pattern, java.util.Locale locale)
pattern
- the pattern for this message formatlocale
- the locale for this message formatjava.lang.IllegalArgumentException
- if the pattern is invalidprivate static java.lang.String process(java.lang.String pattern, java.util.List<java.lang.String> parameterNames)
To ensure that the same parsing rules apply, this code is copied from
MessageFormat.applyPattern(String)
but with different
actions when a parameter is recognized.
pattern
- PatternparameterNames
- Names of parameters (output)private static void makeFormat(java.lang.StringBuilder[] segments, java.util.List<java.lang.String> parameterNames)
segments
- Comma-separated segments of the parameter definitionparameterNames
- List of parameter names seen so farpublic java.lang.String format(java.util.Map<java.lang.Object,java.lang.Object> argMap)
Arguments may appear in the map using named keys (of type String), or positional keys (0-based ordinals represented either as type String or Integer).
argMap
- A map containing the arguments as (key, value) pairsjava.lang.IllegalArgumentException
- if the Format cannot format the given
objectprivate java.lang.Object getArg(java.util.Map<java.lang.Object,java.lang.Object> argMap, int ordinal)
ordinal
th argument.argMap
- Map of argument valuesordinal
- Ordinal of argumentpublic static java.lang.String formatByName(java.lang.String pattern, java.util.Map<java.lang.Object,java.lang.Object> argMap)
Template
(pattern).format(java.util.Map<java.lang.Object, java.lang.Object>)
(args)
java.lang.IllegalArgumentException
- if the pattern is invalid,
or if an argument in the
arguments
array is not of the
type expected by the format element(s)
that use it.public java.util.List<java.lang.String> getParameterNames()
Copyright © 2012–2019 The Apache Software Foundation. All rights reserved.