package org.springframework.util;
Miscellaneous
java.lang.String utility methods.
Mainly for internal use within the framework; consider
Jakarta's Commons Lang
for a more comprehensive suite of String utilities.
This class delivers some simple functionality that should really
be provided by the core Java String and java.lang.StringBuffer
classes, such as the ability to replace(java.lang.String,java.lang.String,java.lang.String) all occurrences of a given
substring in a target string. It also provides easy-to-use methods to convert
between delimited strings, such as CSV strings, and collections and arrays.
- Author(s):
- Rod Johnson
- Juergen Hoeller
- Keith Donald
- Rob Harrop
- Rick Evans
- Since:
- 16 April 2001
- See also:
org.apache.commons.lang.StringUtils
Check that the given CharSequence is neither
null nor of length 0.
Note: Will return
true for a CharSequence that purely consists of whitespace.
StringUtils.hasLength(null) = false
StringUtils.hasLength("") = false
StringUtils.hasLength(" ") = true
StringUtils.hasLength("Hello") = true
- Parameters:
str the CharSequence to check (may be null)- Returns:
true if the CharSequence is not null and has length- See also:
hasText(java.lang.String)
return (str != null && str.length() > 0);
Check that the given String is neither
null nor of length 0.
Note: Will return
true for a String that purely consists of whitespace.
Check whether the given CharSequence has actual text.
More specifically, returns
true if the string not
null,
its length is greater than 0, and it contains at least one non-whitespace character.
StringUtils.hasText(null) = false
StringUtils.hasText("") = false
StringUtils.hasText(" ") = false
StringUtils.hasText("12345") = true
StringUtils.hasText(" 12345 ") = true
- Parameters:
str the CharSequence to check (may be null)- Returns:
true if the CharSequence is not null,
its length is greater than 0, and it does not contain whitespace only- See also:
java.lang.Character.isWhitespace(char)
for (int i = 0; i < strLen; i++) { Check whether the given String has actual text.
More specifically, returns
true if the string not
null,
its length is greater than 0, and it contains at least one non-whitespace character.
- Parameters:
str the String to check (may be null)- Returns:
true if the String is not null, its length is
greater than 0, and it does not contain whitespace only- See also:
hasText(java.lang.CharSequence)
Check whether the given CharSequence contains any whitespace characters.
- Parameters:
str the CharSequence to check (may be null)- Returns:
true if the CharSequence is not empty and
contains at least 1 whitespace character- See also:
java.lang.Character.isWhitespace(char)
for (int i = 0; i < strLen; i++) { Check whether the given String contains any whitespace characters.
Trim leading and trailing whitespace from the given String.
Trim
all whitespace from the given String:
leading, trailing, and inbetween characters.
while (buf.length() > index) { Trim leading whitespace from the given String.
Trim trailing whitespace from the given String.
Trim all occurences of the supplied leading character from the given String.
- Parameters:
str the String to checkleadingCharacter the leading character to be trimmed- Returns:
- the trimmed String
while (buf.length() > 0 && buf.charAt(0) == leadingCharacter) { Trim all occurences of the supplied trailing character from the given String.
- Parameters:
str the String to checktrailingCharacter the trailing character to be trimmed- Returns:
- the trimmed String
Test if the given String starts with the specified prefix,
ignoring upper/lower case.
if (str == null || prefix == null) { return lcStr.equals(lcPrefix);
Test if the given String ends with the specified suffix,
ignoring upper/lower case.
if (str == null || suffix == null) { return lcStr.equals(lcSuffix);
Test whether the given string matches the given substring
at the given index.
- Parameters:
str the original string (or StringBuffer)index the index in the original string to start matching againstsubstring the substring to match at the given index
for (int j = 0; j < substring.length(); j++) { Count the occurrences of the substring in string s.
- Parameters:
str string to search in. Return 0 if this is null.sub string to search for. Return 0 if this is null.
if (str == null || sub == null || str.length() == 0 || sub.length() == 0) { int count = 0, pos = 0, idx = 0;
while ((idx = str.indexOf(sub, pos)) != -1) { Replace all occurences of a substring within a string with
another string.
- Parameters:
inString String to examineoldPattern String to replacenewPattern String to insert- Returns:
- a String with the replacements
int index = inString.indexOf(oldPattern);
int patLen = oldPattern.length();
index = inString.indexOf(oldPattern, pos);
Delete all occurrences of the given substring.
- Parameters:
inString the original Stringpattern the pattern to delete all occurrences of- Returns:
- the resulting String
return replace(inString, pattern, "");
Delete any character in a given String.
- Parameters:
inString the original StringcharsToDelete a set of characters to delete.
E.g. "az\n" will delete 'a's, 'z's and new lines.- Returns:
- the resulting String
for (int i = 0; i < inString.length(); i++) { if (charsToDelete.indexOf(c) == -1) { Quote the given String with single quotes.
- Parameters:
str the input String (e.g. "myString")- Returns:
- the quoted String (e.g. "'myString'"),
or
null if the input was null
return (str != null ? "'" + str + "'" : null);
Turn the given Object into a String with single quotes
if it is a String; keeping the Object as-is else.
- Parameters:
obj the input Object (e.g. "myString")- Returns:
- the quoted String (e.g. "'myString'"),
or the input object as-is if not a String
Unqualify a string qualified by a '.' dot character. For example,
"this.name.is.qualified", returns "qualified".
- Parameters:
qualifiedName the qualified name
Unqualify a string qualified by a separator character. For example,
"this:name:is:qualified" returns "qualified" if using a ':' separator.
- Parameters:
qualifiedName the qualified nameseparator the separator
Capitalize a
String, changing the first letter to
upper case as per
java.lang.Character.toUpperCase(char).
No other letters are changed.
- Parameters:
str the String to capitalize, may be null- Returns:
- the capitalized String,
null if null
Uncapitalize a
String, changing the first letter to
lower case as per
java.lang.Character.toLowerCase(char).
No other letters are changed.
- Parameters:
str the String to uncapitalize, may be null- Returns:
- the uncapitalized String,
null if null
if (str == null || str.length() == 0) { Extract the filename from the given path,
e.g. "mypath/myfile.txt" -> "myfile.txt".
- Parameters:
path the file path (may be null)- Returns:
- the extracted filename, or
null if none
return (separatorIndex != -1 ? path.substring(separatorIndex + 1) : path);
Extract the filename extension from the given path,
e.g. "mypath/myfile.txt" -> "txt".
- Parameters:
path the file path (may be null)- Returns:
- the extracted filename extension, or
null if none
return (sepIndex != -1 ? path.substring(sepIndex + 1) : null);
Strip the filename extension from the given path,
e.g. "mypath/myfile.txt" -> "mypath/myfile".
- Parameters:
path the file path (may be null)- Returns:
- the path with stripped filename extension,
or
null if none
return (sepIndex != -1 ? path.substring(0, sepIndex) : path);
Apply the given relative path to the given path,
assuming standard Java folder separation (i.e. "/" separators);
- Parameters:
path the path to start from (usually a full file path)relativePath the relative path to apply
(relative to the full file path above)- Returns:
- the full file path that results from applying the relative path
if (separatorIndex != -1) { return newPath + relativePath;
Normalize the path by suppressing sequences like "path/.." and
inner simple dots.
The result is convenient for path comparison. For other uses,
notice that Windows separators ("\") are replaced by simple slashes.
- Parameters:
path the original path- Returns:
- the normalized path
int prefixIndex = pathToUse.indexOf(":"); prefix = pathToUse.substring(0, prefixIndex + 1);
pathToUse = pathToUse.substring(prefixIndex + 1);
for (int i = pathArray.length - 1; i >= 0; i--) { String element = pathArray[i];
pathElements.add(0, element);
for (int i = 0; i < tops; i++) { Compare two paths after normalization of them.
- Parameters:
path1 first path for comparisonpath2 second path for comparison- Returns:
- whether the two paths are equivalent after normalization
Parse the given
localeString into a
java.util.Locale.
This is the inverse operation of Locale's toString.
- Parameters:
localeString the locale string, following Locale's
toString() format ("en", "en_UK", etc);
also accepts spaces as separators, as an alternative to underscores- Returns:
- a corresponding
Locale instance
String language = (parts.length > 0 ? parts[0] : "");
String country = (parts.length > 1 ? parts[1] : "");
int endIndexOfCountryCode = localeString.indexOf(country) + country.length();
return (language.length() > 0 ? new Locale(language, country, variant) : null);
Determine the RFC 3066 compliant language tag,
as used for the HTTP "Accept-Language" header.
- Parameters:
locale the Locale to transform to a language tag- Returns:
- the RFC 3066 compliant language tag as String
Append the given String to the given String array, returning a new array
consisting of the input array contents plus the given String.
- Parameters:
array the array to append to (can be null)str the String to append- Returns:
- the new array (never
null)
System.arraycopy(array, 0, newArr, 0, array.length);
newArr[array.length] = str;
Concatenate the given String arrays into one,
with overlapping array elements included twice.
The order of elements in the original arrays is preserved.
- Parameters:
array1 the first array (can be null)array2 the second array (can be null)- Returns:
- the new array (
null if both given arrays were null)
String[] newArr = new String[array1.length + array2.length];
System.arraycopy(array1, 0, newArr, 0, array1.length);
System.arraycopy(array2, 0, newArr, array1.length, array2.length);
Merge the given String arrays into one, with overlapping
array elements only included once.
The order of elements in the original arrays is preserved
(with the exception of overlapping elements, which are only
included on their first occurence).
- Parameters:
array1 the first array (can be null)array2 the second array (can be null)- Returns:
- the new array (
null if both given arrays were null)
for (int i = 0; i < array2.length; i++) { Turn given source String array into sorted array.
- Parameters:
array the source array- Returns:
- the sorted array (never
null)
Copy the given Collection into a String array.
The Collection must contain String elements only.
- Parameters:
collection the Collection to copy- Returns:
- the String array (
null if the passed-in
Collection was null)
if (collection == null) { Copy the given Enumeration into a String array.
The Enumeration must contain String elements only.
- Parameters:
enumeration the Enumeration to copy- Returns:
- the String array (
null if the passed-in
Enumeration was null)
if (enumeration == null) { List list = Collections.list(enumeration);
Trim the elements of the given String array,
calling
String.trim() on each of them.
- Parameters:
array the original String array- Returns:
- the resulting array (of the same size) with trimmed elements
for (int i = 0; i < array.length; i++) { result[i] = (element != null ? element.trim() : null);
Remove duplicate Strings from the given array.
Also sorts the array, as it uses a TreeSet.
- Parameters:
array the String array- Returns:
- an array without duplicates, in natural sort order
for (int i = 0; i < array.length; i++) { Split a String at the first occurrence of the delimiter.
Does not include the delimiter in the result.
- Parameters:
toSplit the string to splitdelimiter to split the string up with- Returns:
- a two element array with index 0 being before the delimiter, and
index 1 being after the delimiter (neither element includes the delimiter);
or
null if the delimiter wasn't found in the given input String
int offset = toSplit.indexOf(delimiter);
return new String[] {beforeDelimiter, afterDelimiter}; Take an array Strings and split each element based on the given delimiter.
A
Properties instance is then generated, with the left of the
delimiter providing the key, and the right of the delimiter providing the value.
Will trim both the key and value before adding them to the
Properties instance.
- Parameters:
array the array to processdelimiter to split each element using (typically the equals symbol)- Returns:
- a
Properties instance representing the array contents,
or null if the array to process was null or empty
Take an array Strings and split each element based on the given delimiter.
A
Properties instance is then generated, with the left of the
delimiter providing the key, and the right of the delimiter providing the value.
Will trim both the key and value before adding them to the
Properties instance.
- Parameters:
array the array to processdelimiter to split each element using (typically the equals symbol)charsToDelete one or more characters to remove from each element
prior to attempting the split operation (typically the quotation mark
symbol), or null if no removal should occur- Returns:
- a
Properties instance representing the array contents,
or null if the array to process was null or empty
for (int i = 0; i < array.length; i++) { if (charsToDelete != null) { element = deleteAny(array[i], charsToDelete);
if (splittedElement == null) { Tokenize the given String into a String array via a StringTokenizer.
Trims tokens and omits empty tokens.
The given delimiters string is supposed to consist of any number of
delimiter characters. Each of those characters can be used to separate
tokens. A delimiter is always a single character; for multi-character
delimiters, consider using delimitedListToStringArray
Tokenize the given String into a String array via a StringTokenizer.
The given delimiters string is supposed to consist of any number of
delimiter characters. Each of those characters can be used to separate
tokens. A delimiter is always a single character; for multi-character
delimiters, consider using delimitedListToStringArray
- Parameters:
str the String to tokenizedelimiters the delimiter characters, assembled as String
(each of those characters is individually considered as delimiter)trimTokens trim the tokens via String's trimignoreEmptyTokens omit empty tokens from the result array
(only applies to tokens that are empty after trimming; StringTokenizer
will not consider subsequent delimiters as token in the first place).- Returns:
- an array of the tokens (
null if the input String
was null) - See also:
java.util.StringTokenizerjava.lang.String.trim()delimitedListToStringArray(java.lang.String,java.lang.String)
String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) { if (!ignoreEmptyTokens || token.length() > 0) { Take a String which is a delimited list and convert it to a String array.
A single delimiter can consists of more than one character: It will still
be considered as single delimiter string, rather than as bunch of potential
delimiter characters - in contrast to tokenizeToStringArray.
Take a String which is a delimited list and convert it to a String array.
A single delimiter can consists of more than one character: It will still
be considered as single delimiter string, rather than as bunch of potential
delimiter characters - in contrast to tokenizeToStringArray.
- Parameters:
str the input Stringdelimiter the delimiter between elements (this is a single delimiter,
rather than a bunch individual delimiter characters)charsToDelete a set of characters to delete. Useful for deleting unwanted
line breaks: e.g. "\r\n\f" will delete all new lines and line feeds in a String.- Returns:
- an array of the tokens in the list
- See also:
tokenizeToStringArray(java.lang.String,java.lang.String)
for (int i = 0; i < str.length(); i++) { while ((delPos = str.indexOf(delimiter, pos)) != -1) { pos = delPos + delimiter.length();
Convert a CSV list into an array of Strings.
- Parameters:
str the input String- Returns:
- an array of Strings, or the empty array in case of empty input
Convenience method to convert a CSV string list to a set.
Note that this will suppress duplicates.
- Parameters:
str the input String- Returns:
- a Set of String entries in the list
for (int i = 0; i < tokens.length; i++) { Convenience method to return a Collection as a delimited (e.g. CSV)
String. E.g. useful for
toString() implementations.
- Parameters:
coll the Collection to displaydelim the delimiter to use (probably a ",")prefix the String to start each element withsuffix the String to end each element with- Returns:
- the delimited String
if (CollectionUtils.isEmpty(coll)) { Convenience method to return a Collection as a delimited (e.g. CSV)
String. E.g. useful for
toString() implementations.
- Parameters:
coll the Collection to displaydelim the delimiter to use (probably a ",")- Returns:
- the delimited String
Convenience method to return a Collection as a CSV String.
E.g. useful for
toString() implementations.
- Parameters:
coll the Collection to display- Returns:
- the delimited String
Convenience method to return a String array as a delimited (e.g. CSV)
String. E.g. useful for
toString() implementations.
- Parameters:
arr the array to displaydelim the delimiter to use (probably a ",")- Returns:
- the delimited String
for (int i = 0; i < arr.length; i++) { Convenience method to return a String array as a CSV String.
E.g. useful for
toString() implementations.
- Parameters:
arr the array to display- Returns:
- the delimited String