Class StringUtils
- java.lang.Object
-
- org.springframework.util.StringUtils
public abstract class StringUtils extends Object
MiscellaneousString
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
andStringBuilder
classes, such as the ability toreplace(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.- Since:
- 16 April 2001
- Author:
- Rod Johnson, Juergen Hoeller, Keith Donald, Rob Harrop, Rick Evans, Arjen Poutsma
-
Constructor Summary
Constructors Constructor and Description StringUtils()
Method Summary
Methods Modifier and Type Method and Description static String[]
addStringToArray(String[] array, String str)
Append the given String to the given String array, returning a new array consisting of the input array contents plus the given String.static String
applyRelativePath(String path, String relativePath)
Apply the given relative path to the given path, assuming standard Java folder separation (i.e.static String
arrayToCommaDelimitedString(Object[] arr)
Convenience method to return a String array as a CSV String.static String
arrayToDelimitedString(Object[] arr, String delim)
Convenience method to return a String array as a delimited (e.g.static String
capitalize(String str)
Capitalize aString
, changing the first letter to upper case as perCharacter.toUpperCase(char)
.static String
cleanPath(String path)
Normalize the path by suppressing sequences like "path/.." and inner simple dots.static String
collectionToCommaDelimitedString(Collection<?> coll)
Convenience method to return a Collection as a CSV String.static String
collectionToDelimitedString(Collection<?> coll, String delim)
Convenience method to return a Collection as a delimited (e.g.static String
collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix)
Convenience method to return a Collection as a delimited (e.g.static Set<String>
commaDelimitedListToSet(String str)
Convenience method to convert a CSV string list to a set.static String[]
commaDelimitedListToStringArray(String str)
Convert a CSV list into an array of Strings.static String[]
concatenateStringArrays(String[] array1, String[] array2)
Concatenate the given String arrays into one, with overlapping array elements included twice.static boolean
containsWhitespace(CharSequence str)
Check whether the given CharSequence contains any whitespace characters.static boolean
containsWhitespace(String str)
Check whether the given String contains any whitespace characters.static int
countOccurrencesOf(String str, String sub)
Count the occurrences of the substring in string s.static String
delete(String inString, String pattern)
Delete all occurrences of the given substring.static String
deleteAny(String inString, String charsToDelete)
Delete any character in a given String.static String[]
delimitedListToStringArray(String str, String delimiter)
Take a String which is a delimited list and convert it to a String array.static String[]
delimitedListToStringArray(String str, String delimiter, String charsToDelete)
Take a String which is a delimited list and convert it to a String array.static boolean
endsWithIgnoreCase(String str, String suffix)
Test if the given String ends with the specified suffix, ignoring upper/lower case.static String
getFilename(String path)
Extract the filename from the given path, e.g.static String
getFilenameExtension(String path)
Extract the filename extension from the given path, e.g.static boolean
hasLength(CharSequence str)
Check that the given CharSequence is neithernull
nor of length 0.static boolean
hasLength(String str)
Check that the given String is neithernull
nor of length 0.static boolean
hasText(CharSequence str)
Check whether the given CharSequence has actual text.static boolean
hasText(String str)
Check whether the given String has actual text.static boolean
isEmpty(Object str)
Check whether the given String is empty.static String[]
mergeStringArrays(String[] array1, String[] array2)
Merge the given String arrays into one, with overlapping array elements only included once.static Locale
parseLocaleString(String localeString)
Parse the givenlocaleString
value into aLocale
.static boolean
pathEquals(String path1, String path2)
Compare two paths after normalization of them.static String
quote(String str)
Quote the given String with single quotes.static Object
quoteIfString(Object obj)
Turn the given Object into a String with single quotes if it is a String; keeping the Object as-is else.static String[]
removeDuplicateStrings(String[] array)
Remove duplicate Strings from the given array.static String
replace(String inString, String oldPattern, String newPattern)
Replace all occurrences of a substring within a string with another string.static String[]
sortStringArray(String[] array)
Turn given source String array into sorted array.static String[]
split(String toSplit, String delimiter)
Split a String at the first occurrence of the delimiter.static Properties
splitArrayElementsIntoProperties(String[] array, String delimiter)
Take an array Strings and split each element based on the given delimiter.static Properties
splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete)
Take an array Strings and split each element based on the given delimiter.static boolean
startsWithIgnoreCase(String str, String prefix)
Test if the given String starts with the specified prefix, ignoring upper/lower case.static String
stripFilenameExtension(String path)
Strip the filename extension from the given path, e.g.static boolean
substringMatch(CharSequence str, int index, CharSequence substring)
Test whether the given string matches the given substring at the given index.static String[]
tokenizeToStringArray(String str, String delimiters)
Tokenize the given String into a String array via a StringTokenizer.static String[]
tokenizeToStringArray(String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens)
Tokenize the given String into a String array via a StringTokenizer.static String
toLanguageTag(Locale locale)
Determine the RFC 3066 compliant language tag, as used for the HTTP "Accept-Language" header.static String[]
toStringArray(Collection<String> collection)
Copy the given Collection into a String array.static String[]
toStringArray(Enumeration<String> enumeration)
Copy the given Enumeration into a String array.static String
trimAllWhitespace(String str)
Trim all whitespace from the given String: leading, trailing, and in between characters.static String[]
trimArrayElements(String[] array)
Trim the elements of the given String array, callingString.trim()
on each of them.static String
trimLeadingCharacter(String str, char leadingCharacter)
Trim all occurrences of the supplied leading character from the given String.static String
trimLeadingWhitespace(String str)
Trim leading whitespace from the given String.static String
trimTrailingCharacter(String str, char trailingCharacter)
Trim all occurrences of the supplied trailing character from the given String.static String
trimTrailingWhitespace(String str)
Trim trailing whitespace from the given String.static String
trimWhitespace(String str)
Trim leading and trailing whitespace from the given String.static String
uncapitalize(String str)
Uncapitalize aString
, changing the first letter to lower case as perCharacter.toLowerCase(char)
.static String
unqualify(String qualifiedName)
Unqualify a string qualified by a '.' dot character.static String
unqualify(String qualifiedName, char separator)
Unqualify a string qualified by a separator character.
-
Method Detail
isEmpty
public static boolean isEmpty(Object str)
Check whether the given String is empty.This method accepts any Object as an argument, comparing it to
null
and the empty String. As a consequence, this method will never returntrue
for a non-null non-String object.The Object signature is useful for general attribute handling code that commonly deals with Strings but generally has to iterate over Objects since attributes may e.g. be primitive value objects as well.
- Parameters:
-
str
- the candidate String - Since:
- 3.2.1
hasLength
public static boolean hasLength(CharSequence str)
Check that the given CharSequence is neithernull
nor of length 0. Note: Will returntrue
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 benull
) - Returns:
-
true
if the CharSequence is not null and has length - See Also:
-
hasText(String)
hasLength
public static boolean hasLength(String str)
Check that the given String is neithernull
nor of length 0. Note: Will returntrue
for a String that purely consists of whitespace.- Parameters:
-
str
- the String to check (may benull
) - Returns:
-
true
if the String is not null and has length - See Also:
-
hasLength(CharSequence)
hasText
public static boolean hasText(CharSequence str)
Check whether the given CharSequence has actual text. More specifically, returnstrue
if the string notnull
, 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 benull
) - Returns:
-
true
if the CharSequence is notnull
, its length is greater than 0, and it does not contain whitespace only - See Also:
-
Character.isWhitespace(char)
hasText
public static boolean hasText(String str)
Check whether the given String has actual text. More specifically, returnstrue
if the string notnull
, its length is greater than 0, and it contains at least one non-whitespace character.- Parameters:
-
str
- the String to check (may benull
) - Returns:
-
true
if the String is notnull
, its length is greater than 0, and it does not contain whitespace only - See Also:
-
hasText(CharSequence)
containsWhitespace
public static boolean containsWhitespace(CharSequence str)
Check whether the given CharSequence contains any whitespace characters.- Parameters:
-
str
- the CharSequence to check (may benull
) - Returns:
-
true
if the CharSequence is not empty and contains at least 1 whitespace character - See Also:
-
Character.isWhitespace(char)
containsWhitespace
public static boolean containsWhitespace(String str)
Check whether the given String contains any whitespace characters.- Parameters:
-
str
- the String to check (may benull
) - Returns:
-
true
if the String is not empty and contains at least 1 whitespace character - See Also:
-
containsWhitespace(CharSequence)
trimWhitespace
public static String trimWhitespace(String str)
Trim leading and trailing whitespace from the given String.- Parameters:
-
str
- the String to check - Returns:
- the trimmed String
- See Also:
-
Character.isWhitespace(char)
trimAllWhitespace
public static String trimAllWhitespace(String str)
Trim all whitespace from the given String: leading, trailing, and in between characters.- Parameters:
-
str
- the String to check - Returns:
- the trimmed String
- See Also:
-
Character.isWhitespace(char)
trimLeadingWhitespace
public static String trimLeadingWhitespace(String str)
Trim leading whitespace from the given String.- Parameters:
-
str
- the String to check - Returns:
- the trimmed String
- See Also:
-
Character.isWhitespace(char)
trimTrailingWhitespace
public static String trimTrailingWhitespace(String str)
Trim trailing whitespace from the given String.- Parameters:
-
str
- the String to check - Returns:
- the trimmed String
- See Also:
-
Character.isWhitespace(char)
trimLeadingCharacter
public static String trimLeadingCharacter(String str, char leadingCharacter)
Trim all occurrences of the supplied leading character from the given String.- Parameters:
-
str
- the String to check -
leadingCharacter
- the leading character to be trimmed - Returns:
- the trimmed String
trimTrailingCharacter
public static String trimTrailingCharacter(String str, char trailingCharacter)
Trim all occurrences of the supplied trailing character from the given String.- Parameters:
-
str
- the String to check -
trailingCharacter
- the trailing character to be trimmed - Returns:
- the trimmed String
startsWithIgnoreCase
public static boolean startsWithIgnoreCase(String str, String prefix)
Test if the given String starts with the specified prefix, ignoring upper/lower case.- Parameters:
-
str
- the String to check -
prefix
- the prefix to look for - See Also:
-
String.startsWith(java.lang.String, int)
endsWithIgnoreCase
public static boolean endsWithIgnoreCase(String str, String suffix)
Test if the given String ends with the specified suffix, ignoring upper/lower case.- Parameters:
-
str
- the String to check -
suffix
- the suffix to look for - See Also:
-
String.endsWith(java.lang.String)
substringMatch
public static boolean substringMatch(CharSequence str, int index, CharSequence substring)
Test whether the given string matches the given substring at the given index.- Parameters:
-
str
- the original string (or StringBuilder) -
index
- the index in the original string to start matching against -
substring
- the substring to match at the given index
countOccurrencesOf
public static int countOccurrencesOf(String str, String sub)
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.
replace
public static String replace(String inString, String oldPattern, String newPattern)
Replace all occurrences of a substring within a string with another string.- Parameters:
-
inString
- String to examine -
oldPattern
- String to replace -
newPattern
- String to insert - Returns:
- a String with the replacements
delete
public static String delete(String inString, String pattern)
Delete all occurrences of the given substring.- Parameters:
-
inString
- the original String -
pattern
- the pattern to delete all occurrences of - Returns:
- the resulting String
deleteAny
public static String deleteAny(String inString, String charsToDelete)
Delete any character in a given String.- Parameters:
-
inString
- the original String -
charsToDelete
- a set of characters to delete. E.g. "az\n" will delete 'a's, 'z's and new lines. - Returns:
- the resulting String
quote
public static String quote(String str)
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 wasnull
quoteIfString
public static Object quoteIfString(Object obj)
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
public static String unqualify(String qualifiedName)
Unqualify a string qualified by a '.' dot character. For example, "this.name.is.qualified", returns "qualified".- Parameters:
-
qualifiedName
- the qualified name
unqualify
public static String unqualify(String qualifiedName, char separator)
Unqualify a string qualified by a separator character. For example, "this:name:is:qualified" returns "qualified" if using a ':' separator.- Parameters:
-
qualifiedName
- the qualified name -
separator
- the separator
capitalize
public static String capitalize(String str)
Capitalize aString
, changing the first letter to upper case as perCharacter.toUpperCase(char)
. No other letters are changed.- Parameters:
-
str
- the String to capitalize, may benull
- Returns:
-
the capitalized String,
null
if null
uncapitalize
public static String uncapitalize(String str)
Uncapitalize aString
, changing the first letter to lower case as perCharacter.toLowerCase(char)
. No other letters are changed.- Parameters:
-
str
- the String to uncapitalize, may benull
- Returns:
-
the uncapitalized String,
null
if null
getFilename
public static String getFilename(String path)
Extract the filename from the given path, e.g. "mypath/myfile.txt" -> "myfile.txt".- Parameters:
-
path
- the file path (may benull
) - Returns:
-
the extracted filename, or
null
if none
getFilenameExtension
public static String getFilenameExtension(String path)
Extract the filename extension from the given path, e.g. "mypath/myfile.txt" -> "txt".- Parameters:
-
path
- the file path (may benull
) - Returns:
-
the extracted filename extension, or
null
if none
stripFilenameExtension
public static String stripFilenameExtension(String path)
Strip the filename extension from the given path, e.g. "mypath/myfile.txt" -> "mypath/myfile".- Parameters:
-
path
- the file path (may benull
) - Returns:
-
the path with stripped filename extension, or
null
if none
applyRelativePath
public static String applyRelativePath(String path, String relativePath)
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
cleanPath
public static String cleanPath(String path)
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
pathEquals
public static boolean pathEquals(String path1, String path2)
Compare two paths after normalization of them.- Parameters:
-
path1
- first path for comparison -
path2
- second path for comparison - Returns:
- whether the two paths are equivalent after normalization
parseLocaleString
public static Locale parseLocaleString(String localeString)
Parse the givenlocaleString
value into aLocale
.This is the inverse operation of
Locale's toString
.- Parameters:
-
localeString
- the locale String, followingLocale's
toString()
format ("en", "en_UK", etc); also accepts spaces as separators, as an alternative to underscores - Returns:
-
a corresponding
Locale
instance - Throws:
-
IllegalArgumentException
- in case of an invalid locale specification
toLanguageTag
public static String toLanguageTag(Locale locale)
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
addStringToArray
public static String[] addStringToArray(String[] array, String str)
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 benull
) -
str
- the String to append - Returns:
-
the new array (never
null
)
concatenateStringArrays
public static String[] concatenateStringArrays(String[] array1, String[] array2)
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 benull
) -
array2
- the second array (can benull
) - Returns:
-
the new array (
null
if both given arrays werenull
)
mergeStringArrays
public static String[] mergeStringArrays(String[] array1, String[] array2)
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 occurrence).
- Parameters:
-
array1
- the first array (can benull
) -
array2
- the second array (can benull
) - Returns:
-
the new array (
null
if both given arrays werenull
)
sortStringArray
public static String[] sortStringArray(String[] array)
Turn given source String array into sorted array.- Parameters:
-
array
- the source array - Returns:
-
the sorted array (never
null
)
toStringArray
public static String[] toStringArray(Collection<String> collection)
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 wasnull
)
toStringArray
public static String[] toStringArray(Enumeration<String> enumeration)
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 wasnull
)
trimArrayElements
public static String[] trimArrayElements(String[] array)
Trim the elements of the given String array, callingString.trim()
on each of them.- Parameters:
-
array
- the original String array - Returns:
- the resulting array (of the same size) with trimmed elements
removeDuplicateStrings
public static String[] removeDuplicateStrings(String[] array)
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
split
public static String[] split(String toSplit, String delimiter)
Split a String at the first occurrence of the delimiter. Does not include the delimiter in the result.- Parameters:
-
toSplit
- the string to split -
delimiter
- 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
splitArrayElementsIntoProperties
public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter)
Take an array Strings and split each element based on the given delimiter. AProperties
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 process -
delimiter
- to split each element using (typically the equals symbol) - Returns:
-
a
Properties
instance representing the array contents, ornull
if the array to process was null or empty
splitArrayElementsIntoProperties
public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete)
Take an array Strings and split each element based on the given delimiter. AProperties
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 process -
delimiter
- 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), ornull
if no removal should occur - Returns:
-
a
Properties
instance representing the array contents, ornull
if the array to process wasnull
or empty
tokenizeToStringArray
public static String[] tokenizeToStringArray(String str, String delimiters)
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
- Parameters:
-
str
- the String to tokenize -
delimiters
- the delimiter characters, assembled as String (each of those characters is individually considered as delimiter). - Returns:
- an array of the tokens
- See Also:
-
StringTokenizer
,String.trim()
,delimitedListToStringArray(java.lang.String, java.lang.String)
tokenizeToStringArray
public static String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens)
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 tokenize -
delimiters
- the delimiter characters, assembled as String (each of those characters is individually considered as delimiter) -
trimTokens
- trim the tokens via String'strim
-
ignoreEmptyTokens
- 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 wasnull
) - See Also:
-
StringTokenizer
,String.trim()
,delimitedListToStringArray(java.lang.String, java.lang.String)
delimitedListToStringArray
public static String[] delimitedListToStringArray(String str, String delimiter)
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 String -
delimiter
- the delimiter between elements (this is a single delimiter, rather than a bunch individual delimiter characters) - Returns:
- an array of the tokens in the list
- See Also:
-
tokenizeToStringArray(java.lang.String, java.lang.String)
delimitedListToStringArray
public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete)
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 String -
delimiter
- 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)
commaDelimitedListToStringArray
public static String[] commaDelimitedListToStringArray(String str)
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
commaDelimitedListToSet
public static Set<String> commaDelimitedListToSet(String str)
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
collectionToDelimitedString
public static String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix)
Convenience method to return a Collection as a delimited (e.g. CSV) String. E.g. useful fortoString()
implementations.- Parameters:
-
coll
- the Collection to display -
delim
- the delimiter to use (probably a ",") -
prefix
- the String to start each element with -
suffix
- the String to end each element with - Returns:
- the delimited String
collectionToDelimitedString
public static String collectionToDelimitedString(Collection<?> coll, String delim)
Convenience method to return a Collection as a delimited (e.g. CSV) String. E.g. useful fortoString()
implementations.- Parameters:
-
coll
- the Collection to display -
delim
- the delimiter to use (probably a ",") - Returns:
- the delimited String
collectionToCommaDelimitedString
public static String collectionToCommaDelimitedString(Collection<?> coll)
Convenience method to return a Collection as a CSV String. E.g. useful fortoString()
implementations.- Parameters:
-
coll
- the Collection to display - Returns:
- the delimited String
arrayToDelimitedString
public static String arrayToDelimitedString(Object[] arr, String delim)
Convenience method to return a String array as a delimited (e.g. CSV) String. E.g. useful fortoString()
implementations.- Parameters:
-
arr
- the array to display -
delim
- the delimiter to use (probably a ",") - Returns:
- the delimited String