Class StringUtils

java.lang.Object
com.igormaznitsa.jcp.utils.antpathmatcher.StringUtils

abstract class StringUtils extends Object
Miscellaneous String utility methods.

Mainly for internal use within the framework; consider Apache'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 StringBuilder classes. It also provides easy-to-use methods to convert between delimited strings, such as CSV strings, and collections and arrays.

Since:
16 April 2001
  • Field Details

  • Constructor Details

    • StringUtils

      StringUtils()
  • Method Details

    • 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 return true 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 neither null nor of length 0.

      Note: this method returns 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:
    • hasLength

      public static boolean hasLength(String str)
      Check that the given String is neither null nor of length 0.

      Note: this method returns true for a String that purely consists of whitespace.

      Parameters:
      str - the String to check (may be null)
      Returns:
      true if the String is not null and has length
      See Also:
    • hasText

      public static boolean hasText(CharSequence str)
      Check whether the given CharSequence contains actual text.

      More specifically, this method returns true if the CharSequence is 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:
    • hasText

      public static boolean hasText(String str)
      Check whether the given String contains actual text.

      More specifically, this method returns true if the String is 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:
    • containsWhitespace

      public static boolean containsWhitespace(CharSequence str)
      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:
    • containsWhitespace

      public static boolean containsWhitespace(String str)
      Check whether the given String contains any whitespace characters.
      Parameters:
      str - the String to check (may be null)
      Returns:
      true if the String is not empty and contains at least 1 whitespace character
      See Also:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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 sub in string str.
      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 was null
    • 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 a String, changing the first letter to upper case as per Character.toUpperCase(char). No other letters are changed.
      Parameters:
      str - the String to capitalize, may be null
      Returns:
      the capitalized String, or null if the supplied string is null
    • uncapitalize

      public static String uncapitalize(String str)
      Uncapitalize a String, changing the first letter to lower case as per Character.toLowerCase(char). No other letters are changed.
      Parameters:
      str - the String to uncapitalize, may be null
      Returns:
      the uncapitalized String, or null if the supplied string is null
    • changeFirstCharacterCase

      private static String changeFirstCharacterCase(String str, boolean capitalize)
    • getFilename

      public static String getFilename(String path)
      Extract the filename from the given Java resource path, e.g. "mypath/myfile.txt" -> "myfile.txt".
      Parameters:
      path - the file path (may be null)
      Returns:
      the extracted filename, or null if none
    • getFilenameExtension

      public static String getFilenameExtension(String path)
      Extract the filename extension from the given Java resource path, e.g. "mypath/myfile.txt" -> "txt".
      Parameters:
      path - the file path (may be null)
      Returns:
      the extracted filename extension, or null if none
    • stripFilenameExtension

      public static String stripFilenameExtension(String path)
      Strip the filename extension from the given Java resource 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
    • applyRelativePath

      public static String applyRelativePath(String path, String relativePath)
      Apply the given relative path to the given Java resource 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
    • uriDecode

      public static String uriDecode(String source, Charset charset)
      Decode the given encoded URI component value. Based on the following rules:
      • Alphanumeric characters "a" through "z", "A" through "Z", and "0" through "9" stay the same.
      • Special characters "-", "_", ".", and "*" stay the same.
      • A sequence "%<i>xy</i>" is interpreted as a hexadecimal representation of the character.
      Parameters:
      source - the encoded String (may be null)
      charset - the character set
      Returns:
      the decoded value
      Throws:
      IllegalArgumentException - when the given source contains invalid encoded sequences
      Since:
      5.0
      See Also:
    • parseLocaleString

      public static Locale parseLocaleString(String localeString)
      Parse the given localeString value into a 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
      Throws:
      IllegalArgumentException - in case of an invalid locale specification
    • validateLocalePart

      private static void validateLocalePart(String localePart)
    • 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
    • parseTimeZoneString

      public static TimeZone parseTimeZoneString(String timeZoneString)
      Parse the given timeZoneString value into a TimeZone.
      Parameters:
      timeZoneString - the time zone String, following TimeZone.getTimeZone(String) but throwing IllegalArgumentException in case of an invalid time zone specification
      Returns:
      a corresponding TimeZone instance
      Throws:
      IllegalArgumentException - in case of an invalid time zone specification
    • 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 be null)
      str - the String to append
      Returns:
      the new array (never null)
    • isEmpty

      public static boolean isEmpty(Object[] array)
    • 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 be null)
      array2 - the second array (can be null)
      Returns:
      the new array (null if both given arrays were null)
    • 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 be null)
      array2 - the second array (can be null)
      Returns:
      the new array (null if both given arrays were null)
    • 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 supplied Collection was null)
    • 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 was null)
    • trimArrayElements

      public static String[] trimArrayElements(String[] array)
      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
    • removeDuplicateStrings

      public static String[] removeDuplicateStrings(String[] array)
      Remove duplicate strings from the given array.

      As of 4.2, it preserves the original order, as it uses a LinkedHashSet.

      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 of 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 process
      delimiter - 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
    • splitArrayElementsIntoProperties

      public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter, String charsToDelete)
      Take an array of 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 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), 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
    • 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 can 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(java.lang.String, java.lang.String).

      Parameters:
      str - the String to tokenize
      delimiters - the delimiter characters, assembled as a String (each of the characters is individually considered as a delimiter)
      Returns:
      an array of the tokens
      See Also:
    • 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 can 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(java.lang.String, java.lang.String).

      Parameters:
      str - the String to tokenize
      delimiters - the delimiter characters, assembled as a String (each of the characters is individually considered as a delimiter)
      trimTokens - trim the tokens via String.trim()
      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 was null)
      See Also:
    • delimitedListToStringArray

      public static String[] delimitedListToStringArray(String str, String delimiter)
      Take a String that is a delimited list and convert it into a String array.

      A single delimiter may consist of more than one character, but it will still be considered as a single delimiter string, rather than as bunch of potential delimiter characters, in contrast to tokenizeToStringArray(java.lang.String, java.lang.String).

      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:
    • delimitedListToStringArray

      public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete)
      Take a String that is a delimited list and convert it into a String array.

      A single delimiter may consist of more than one character, but it will still be considered as a single delimiter string, rather than as bunch of potential delimiter characters, in contrast to tokenizeToStringArray(java.lang.String, java.lang.String).

      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:
    • commaDelimitedListToStringArray

      public static String[] commaDelimitedListToStringArray(String str)
      Convert a comma delimited list (e.g., a row from a CSV file) 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)
      Convert a comma delimited list (e.g., a row from a CSV file) into a set.

      Note that this will suppress duplicates, and as of 4.2, the elements in the returned set will preserve the original order in a LinkedHashSet.

      Parameters:
      str - the input String
      Returns:
      a set of String entries in the list
      See Also:
    • collectionToDelimitedString

      public static String collectionToDelimitedString(Collection<?> coll, String delim, String prefix, String suffix)
      Convert a Collection to a delimited String (e.g. CSV).

      Useful for toString() implementations.

      Parameters:
      coll - the Collection to convert
      delim - the delimiter to use (typically 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)
      Convert a Collection into a delimited String (e.g. CSV).

      Useful for toString() implementations.

      Parameters:
      coll - the Collection to convert
      delim - the delimiter to use (typically a ",")
      Returns:
      the delimited String
    • collectionToCommaDelimitedString

      public static String collectionToCommaDelimitedString(Collection<?> coll)
      Convert a Collection into a delimited String (e.g., CSV).

      Useful for toString() implementations.

      Parameters:
      coll - the Collection to convert
      Returns:
      the delimited String
    • arrayToDelimitedString

      public static String arrayToDelimitedString(Object[] arr, String delim)
      Convert a String array into a delimited String (e.g. CSV).

      Useful for toString() implementations.

      Parameters:
      arr - the array to display
      delim - the delimiter to use (typically a ",")
      Returns:
      the delimited String
    • arrayToCommaDelimitedString

      public static String arrayToCommaDelimitedString(Object[] arr)
      Convert a String array into a comma delimited String (i.e., CSV).

      Useful for toString() implementations.

      Parameters:
      arr - the array to display
      Returns:
      the delimited String