org.apache.commons.lang.text
public class StrSubstitutor extends Object
This class takes a piece of text and substitutes all the variables within it.
The default definition of a variable is ${variableName}
.
The prefix and suffix can be changed via constructors and set methods.
Variable values are typically resolved from a map, but could also be resolved from system properties, or by supplying a custom variable resolver.
The simplest example is to use this class to replace Java System properties. For example:
StrSubstitutor.replaceSystemProperties( "You are running with java.version = ${java.version} and os.name = ${os.name}.");
Typical usage of this class follows the following pattern: First an instance is created
and initialized with the map that contains the values for the available variables.
If a prefix and/or suffix for variables should be used other than the default ones,
the appropriate settings can be performed. After that the replace()
method can be called passing in the source text for interpolation. In the returned
text all variable references (as long as their values are known) will be resolved.
The following example demonstrates this:
Map valuesMap = HashMap(); valuesMap.put("animal", "quick brown fox"); valuesMap.put("target", "lazy dog"); String templateString = "The ${animal} jumped over the ${target}."; StrSubstitutor sub = new StrSubstitutor(valuesMap); String resolvedString = sub.replace(templateString);yielding:
The quick brown fox jumped over the lazy dog.
In addition to this usage pattern there are some static convenience methods that cover the most common use cases. These methods can be used without the need of manually creating an instance. However if multiple replace operations are to be performed, creating and reusing an instance of this class will be more efficient.
Variable replacement works in a recursive way. Thus, if a variable value contains a variable then that variable will also be replaced. Cyclic replacements are detected and will cause an exception to be thrown.
Sometimes the interpolation's result must contain a variable prefix. As an example take the following source text:
The variable ${${name}} must be used.Here only the variable's name refered to in the text should be replaced resulting in the text (assuming that the value of the
name
variable is x
):
The variable ${x} must be used.To achieve this effect there are two possibilities: Either set a different prefix and suffix for variables which do not conflict with the result text you want to produce. The other possibility is to use the escape character, by default '$'. If this character is placed before a variable reference, this reference is ignored and won't be replaced. For example:
The variable $${${name}} must be used.
Since: 2.2
Version: $Id: StrSubstitutor.java 592077 2007-11-05 16:47:10Z mbenson $
Field Summary | |
---|---|
static char | DEFAULT_ESCAPE
Constant for the default escape character. |
static StrMatcher | DEFAULT_PREFIX
Constant for the default variable prefix. |
static StrMatcher | DEFAULT_SUFFIX
Constant for the default variable suffix. |
Constructor Summary | |
---|---|
StrSubstitutor()
Creates a new instance with defaults for variable prefix and suffix
and the escaping character. | |
StrSubstitutor(Map valueMap)
Creates a new instance and initializes it. | |
StrSubstitutor(Map valueMap, String prefix, String suffix)
Creates a new instance and initializes it. | |
StrSubstitutor(Map valueMap, String prefix, String suffix, char escape)
Creates a new instance and initializes it.
| |
StrSubstitutor(StrLookup variableResolver)
Creates a new instance and initializes it.
| |
StrSubstitutor(StrLookup variableResolver, String prefix, String suffix, char escape)
Creates a new instance and initializes it.
| |
StrSubstitutor(StrLookup variableResolver, StrMatcher prefixMatcher, StrMatcher suffixMatcher, char escape)
Creates a new instance and initializes it.
|
Method Summary | |
---|---|
char | getEscapeChar()
Returns the escape character.
|
StrMatcher | getVariablePrefixMatcher()
Gets the variable prefix matcher currently in use.
|
StrLookup | getVariableResolver()
Gets the VariableResolver that is used to lookup variables.
|
StrMatcher | getVariableSuffixMatcher()
Gets the variable suffix matcher currently in use.
|
static String | replace(Object source, Map valueMap)
Replaces all the occurrences of variables in the given source object with
their matching values from the map.
|
static String | replace(Object source, Map valueMap, String prefix, String suffix)
Replaces all the occurrences of variables in the given source object with
their matching values from the map. |
String | replace(String source)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source string as a template.
|
String | replace(String source, int offset, int length)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source string as a template.
|
String | replace(char[] source)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source array as a template.
|
String | replace(char[] source, int offset, int length)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source array as a template.
|
String | replace(StringBuffer source)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source buffer as a template.
|
String | replace(StringBuffer source, int offset, int length)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source buffer as a template.
|
String | replace(StrBuilder source)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source builder as a template.
|
String | replace(StrBuilder source, int offset, int length)
Replaces all the occurrences of variables with their matching values
from the resolver using the given source builder as a template.
|
String | replace(Object source)
Replaces all the occurrences of variables in the given source object with
their matching values from the resolver. |
boolean | replaceIn(StringBuffer source)
Replaces all the occurrences of variables within the given source buffer
with their matching values from the resolver.
|
boolean | replaceIn(StringBuffer source, int offset, int length)
Replaces all the occurrences of variables within the given source buffer
with their matching values from the resolver.
|
boolean | replaceIn(StrBuilder source)
Replaces all the occurrences of variables within the given source
builder with their matching values from the resolver.
|
boolean | replaceIn(StrBuilder source, int offset, int length)
Replaces all the occurrences of variables within the given source
builder with their matching values from the resolver.
|
static String | replaceSystemProperties(Object source)
Replaces all the occurrences of variables in the given source object with
their matching values from the system properties.
|
protected String | resolveVariable(String variableName, StrBuilder buf, int startPos, int endPos)
Internal method that resolves the value of a variable.
|
void | setEscapeChar(char escapeCharacter)
Sets the escape character.
|
StrSubstitutor | setVariablePrefix(char prefix)
Sets the variable prefix to use.
|
StrSubstitutor | setVariablePrefix(String prefix)
Sets the variable prefix to use.
|
StrSubstitutor | setVariablePrefixMatcher(StrMatcher prefixMatcher)
Sets the variable prefix matcher currently in use.
|
void | setVariableResolver(StrLookup variableResolver)
Sets the VariableResolver that is used to lookup variables.
|
StrSubstitutor | setVariableSuffix(char suffix)
Sets the variable suffix to use.
|
StrSubstitutor | setVariableSuffix(String suffix)
Sets the variable suffix to use.
|
StrSubstitutor | setVariableSuffixMatcher(StrMatcher suffixMatcher)
Sets the variable suffix matcher currently in use.
|
protected boolean | substitute(StrBuilder buf, int offset, int length)
Internal method that substitutes the variables.
|
Parameters: valueMap the map with the variables' values, may be null
Parameters: valueMap the map with the variables' values, may be null prefix the prefix for variables, not null suffix the suffix for variables, not null
Throws: IllegalArgumentException if the prefix or suffix is null
Parameters: valueMap the map with the variables' values, may be null prefix the prefix for variables, not null suffix the suffix for variables, not null escape the escape character
Throws: IllegalArgumentException if the prefix or suffix is null
Parameters: variableResolver the variable resolver, may be null
Parameters: variableResolver the variable resolver, may be null prefix the prefix for variables, not null suffix the suffix for variables, not null escape the escape character
Throws: IllegalArgumentException if the prefix or suffix is null
Parameters: variableResolver the variable resolver, may be null prefixMatcher the prefix for variables, not null suffixMatcher the suffix for variables, not null escape the escape character
Throws: IllegalArgumentException if the prefix or suffix is null
Returns: the character used for escaping variable references
The variable prefix is the characer or characters that identify the start of a variable. This prefix is expressed in terms of a matcher allowing advanced prefix matches.
Returns: the prefix matcher in use
Returns: the VariableResolver
The variable suffix is the characer or characters that identify the end of a variable. This suffix is expressed in terms of a matcher allowing advanced suffix matches.
Returns: the suffix matcher in use
Parameters: source the source text containing the variables to substitute, null returns null valueMap the map with the values, may be null
Returns: the result of the replace operation
Parameters: source the source text containing the variables to substitute, null returns null valueMap the map with the values, may be null prefix the prefix of variables, not null suffix the suffix of variables, not null
Returns: the result of the replace operation
Throws: IllegalArgumentException if the prefix or suffix is null
Parameters: source the string to replace in, null returns null
Returns: the result of the replace operation
Only the specified portion of the string will be processed. The rest of the string is not processed, and is not returned.
Parameters: source the string to replace in, null returns null offset the start offset within the array, must be valid length the length within the array to be processed, must be valid
Returns: the result of the replace operation
Parameters: source the character array to replace in, not altered, null returns null
Returns: the result of the replace operation
Only the specified portion of the array will be processed. The rest of the array is not processed, and is not returned.
Parameters: source the character array to replace in, not altered, null returns null offset the start offset within the array, must be valid length the length within the array to be processed, must be valid
Returns: the result of the replace operation
Parameters: source the buffer to use as a template, not changed, null returns null
Returns: the result of the replace operation
Only the specified portion of the buffer will be processed. The rest of the buffer is not processed, and is not returned.
Parameters: source the buffer to use as a template, not changed, null returns null offset the start offset within the array, must be valid length the length within the array to be processed, must be valid
Returns: the result of the replace operation
Parameters: source the builder to use as a template, not changed, null returns null
Returns: the result of the replace operation
Only the specified portion of the builder will be processed. The rest of the builder is not processed, and is not returned.
Parameters: source the builder to use as a template, not changed, null returns null offset the start offset within the array, must be valid length the length within the array to be processed, must be valid
Returns: the result of the replace operation
toString
and is not altered.
Parameters: source the source to replace in, null returns null
Returns: the result of the replace operation
Parameters: source the buffer to replace in, updated, null returns zero
Returns: true if altered
Only the specified portion of the buffer will be processed. The rest of the buffer is not processed, but it is not deleted.
Parameters: source the buffer to replace in, updated, null returns zero offset the start offset within the array, must be valid length the length within the buffer to be processed, must be valid
Returns: true if altered
Parameters: source the builder to replace in, updated, null returns zero
Returns: true if altered
Only the specified portion of the builder will be processed. The rest of the builder is not processed, but it is not deleted.
Parameters: source the builder to replace in, null returns zero offset the start offset within the array, must be valid length the length within the builder to be processed, must be valid
Returns: true if altered
Parameters: source the source text containing the variables to substitute, null returns null
Returns: the result of the replace operation
Most users of this class do not need to call this method. This method is called automatically by the substitution process.
Writers of subclasses can override this method if they need to alter how each substitution occurs. The method is passed the variable's name and must return the corresponding value. This implementation uses the getVariableResolver with the variable's name as the key.
Parameters: variableName the name of the variable, not null buf the buffer where the substitution is occurring, not null startPos the start position of the variable including the prefix, valid endPos the end position of the variable including the suffix, valid
Returns: the variable's value or null if the variable is unknown
Parameters: escapeCharacter the escape character (0 for disabling escaping)
The variable prefix is the characer or characters that identify the start of a variable. This method allows a single character prefix to be easily set.
Parameters: prefix the prefix character to use
Returns: this, to enable chaining
The variable prefix is the characer or characters that identify the start of a variable. This method allows a string prefix to be easily set.
Parameters: prefix the prefix for variables, not null
Returns: this, to enable chaining
Throws: IllegalArgumentException if the prefix is null
The variable prefix is the characer or characters that identify the start of a variable. This prefix is expressed in terms of a matcher allowing advanced prefix matches.
Parameters: prefixMatcher the prefix matcher to use, null ignored
Returns: this, to enable chaining
Throws: IllegalArgumentException if the prefix matcher is null
Parameters: variableResolver the VariableResolver
The variable suffix is the characer or characters that identify the end of a variable. This method allows a single character suffix to be easily set.
Parameters: suffix the suffix character to use
Returns: this, to enable chaining
The variable suffix is the characer or characters that identify the end of a variable. This method allows a string suffix to be easily set.
Parameters: suffix the suffix for variables, not null
Returns: this, to enable chaining
Throws: IllegalArgumentException if the suffix is null
The variable suffix is the characer or characters that identify the end of a variable. This suffix is expressed in terms of a matcher allowing advanced suffix matches.
Parameters: suffixMatcher the suffix matcher to use, null ignored
Returns: this, to enable chaining
Throws: IllegalArgumentException if the suffix matcher is null
Most users of this class do not need to call this method. This method will be called automatically by another (public) method.
Writers of subclasses can override this method if they need access to the substitution process at the start or end.
Parameters: buf the string builder to substitute into, not null offset the start offset within the builder, must be valid length the length within the builder to be processed, must be valid
Returns: true if altered