/*** 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 {@codetokenizeToStringArray}.
*@paramstr the input String
*@paramdelimiter the delimiter between elements (this is a single delimiter,
* rather than a bunch individual delimiter characters)
*@paramcharsToDelete 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.
*@returnan array of the tokens in the list
*@see#tokenizeToStringArray*/
public staticString[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {if (str == null) {return new String[0];
}if (delimiter == null) {return newString[] {str};
}
List result = new ArrayList();if ("".equals(delimiter)) {for (int i = 0; i < str.length(); i++) {
result.add(deleteAny(str.substring(i, i+ 1), charsToDelete));
}
}else{int pos = 0;intdelPos;while ((delPos = str.indexOf(delimiter, pos)) != -1) {
result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
pos= delPos +delimiter.length();
}if (str.length() > 0 && pos <=str.length()) {//Add rest of String, but not in case of empty input.
result.add(deleteAny(str.substring(pos), charsToDelete));
}
}returntoStringArray(result);
}/*** Copy the given Collection into a String array.
* The Collection must contain String elements only.
*@paramcollection the Collection to copy
*@returnthe String array ({@codenull} if the passed-in
* Collection was {@codenull})*/
public static String[] toStringArray(Collectioncollection) {if (collection == null) {return null;
}return collection.toArray(newString[collection.size()]);
}/*** Delete any character in a given String.
*@paraminString the original String
*@paramcharsToDelete a set of characters to delete.
* E.g. "az\n" will delete ‘a‘s, ‘z‘s and new lines.
*@returnthe resulting String*/
public staticString deleteAny(String inString, String charsToDelete) {if (!hasLength(inString) || !hasLength(charsToDelete)) {returninString;
}
StringBuilder sb= newStringBuilder();for (int i = 0; i < inString.length(); i++) {char c =inString.charAt(i);if (charsToDelete.indexOf(c) == -1) {
sb.append(c);
}
}returnsb.toString();
}/*** Check that the given String is neither {@codenull} nor of length 0.
* Note: Will return {@codetrue} for a String that purely consists of whitespace.
*@paramstr the String to check (may be {@codenull})
*@return{@codetrue} if the String is not null and has length
*@see#hasLength(CharSequence)*/
public static booleanhasLength(String str) {returnhasLength((CharSequence) str);
}/*** Check that the given CharSequence is neither {@codenull} nor of length 0.
* Note: Will return {@codetrue} for a CharSequence that purely consists of whitespace.
*
* StringUtils.hasLength(null) = false
* StringUtils.hasLength("") = false
* StringUtils.hasLength(" ") = true
* StringUtils.hasLength("Hello") = true
*
*@paramstr the CharSequence to check (may be {@codenull})
*@return{@codetrue} if the CharSequence is not null and has length
*@see#hasText(String)*/
public static booleanhasLength(CharSequence str) {return (str != null && str.length() > 0);
}