Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
After seeing many hidden features about programming language, i would like to know hidden features of Spring "de facto" framework. As you know, Spring documentation hides many features and would be nice to share it. And you: what hidden feature of Spring framework do you know ?
Using a comma is just to make it specific - it could be any delimiter, so using List's default toString() doesn't help. (The question could be rephrased as: "best way to implement List's toString?") This is a well-known problem, and I know several ways of doing it, but I'm wondering what the best way is (where "best" means clearest and/or shortest, not most efficient). The problem as a story...
I created a simple markup such as this. <html> <head> <head> <body> <input type="text" style="text-transform:uppercase" /> </body> </html> I was assuming that the browser will capitalize all inputs and indeed it was transformed In my business layer, I am assuming that browser will send the form data on Upper case format also ...
   /*
    * Copyright 2002-2008 the original author or authors.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.springframework.util;
  
  import java.util.Arrays;
  import java.util.List;
  import java.util.Locale;
  import java.util.Set;
  import java.util.TreeSet;

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
  
  public abstract class StringUtils {
  
  	private static final String FOLDER_SEPARATOR = "/";
  
  	private static final String WINDOWS_FOLDER_SEPARATOR = "\\";
  
  	private static final String TOP_PATH = "..";
  
  	private static final String CURRENT_PATH = ".";
  
  	private static final char EXTENSION_SEPARATOR = '.';
  
  
  	//---------------------------------------------------------------------
  	// General convenience methods for working with Strings
  	//---------------------------------------------------------------------
  
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)
  
  	public static boolean hasLength(CharSequence str) {
  		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.

Parameters:
str the String to check (may be null)
Returns:
true if the String is not null and has length
See also:
hasLength(java.lang.CharSequence)
  
  	public static boolean hasLength(String str) {
  		return hasLength((CharSequencestr);
  	}

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)
 
 	public static boolean hasText(CharSequence str) {
 		if (!hasLength(str)) {
 			return false;
 		}
 		int strLen = str.length();
 		for (int i = 0; i < strLeni++) {
 			if (!Character.isWhitespace(str.charAt(i))) {
 				return true;
 			}
 		}
 		return false;
 	}

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)
 
 	public static boolean hasText(String str) {
 		return hasText((CharSequencestr);
 	}

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)
 
 	public static boolean containsWhitespace(CharSequence str) {
 		if (!hasLength(str)) {
 			return false;
 		}
 		int strLen = str.length();
 		for (int i = 0; i < strLeni++) {
 			if (Character.isWhitespace(str.charAt(i))) {
 				return true;
 			}
 		}
 		return false;
 	}

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:
containsWhitespace(java.lang.CharSequence)
 
 	public static boolean containsWhitespace(String str) {
 	}

Trim leading and trailing whitespace from the given String.

Parameters:
str the String to check
Returns:
the trimmed String
See also:
java.lang.Character.isWhitespace(char)
 
 	public static String trimWhitespace(String str) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		while (buf.length() > 0 && Character.isWhitespace(buf.charAt(0))) {
 			buf.deleteCharAt(0);
 		}
 		while (buf.length() > 0 && Character.isWhitespace(buf.charAt(buf.length() - 1))) {
 			buf.deleteCharAt(buf.length() - 1);
 		}
 		return buf.toString();
 	}

Trim all whitespace from the given String: leading, trailing, and inbetween characters.

Parameters:
str the String to check
Returns:
the trimmed String
See also:
java.lang.Character.isWhitespace(char)
 
 	public static String trimAllWhitespace(String str) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		int index = 0;
 		while (buf.length() > index) {
 			if (Character.isWhitespace(buf.charAt(index))) {
 				buf.deleteCharAt(index);
 			}
 			else {
 				index++;
 			}
 		}
 		return buf.toString();
 	}

Trim leading whitespace from the given String.

Parameters:
str the String to check
Returns:
the trimmed String
See also:
java.lang.Character.isWhitespace(char)
 
 	public static String trimLeadingWhitespace(String str) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		while (buf.length() > 0 && Character.isWhitespace(buf.charAt(0))) {
 			buf.deleteCharAt(0);
 		}
 		return buf.toString();
 	}

Trim trailing whitespace from the given String.

Parameters:
str the String to check
Returns:
the trimmed String
See also:
java.lang.Character.isWhitespace(char)
 
 	public static String trimTrailingWhitespace(String str) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		while (buf.length() > 0 && Character.isWhitespace(buf.charAt(buf.length() - 1))) {
 			buf.deleteCharAt(buf.length() - 1);
 		}
 		return buf.toString();
 	}

Trim all occurences 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
 
 	public static String trimLeadingCharacter(String strchar leadingCharacter) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		while (buf.length() > 0 && buf.charAt(0) == leadingCharacter) {
 			buf.deleteCharAt(0);
 		}
 		return buf.toString();
 	}

Trim all occurences 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
 
 	public static String trimTrailingCharacter(String strchar trailingCharacter) {
 		if (!hasLength(str)) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str);
 		while (buf.length() > 0 && buf.charAt(buf.length() - 1) == trailingCharacter) {
 			buf.deleteCharAt(buf.length() - 1);
 		}
 		return buf.toString();
 	}


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:
java.lang.String.startsWith(java.lang.String)
 
 	public static boolean startsWithIgnoreCase(String strString prefix) {
 		if (str == null || prefix == null) {
 			return false;
 		}
 		if (str.startsWith(prefix)) {
 			return true;
 		}
 		if (str.length() < prefix.length()) {
 			return false;
 		}
 		String lcStr = str.substring(0, prefix.length()).toLowerCase();
 		String lcPrefix = prefix.toLowerCase();
 		return lcStr.equals(lcPrefix);
 	}

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:
java.lang.String.endsWith(java.lang.String)
 
 	public static boolean endsWithIgnoreCase(String strString suffix) {
 		if (str == null || suffix == null) {
 			return false;
 		}
 		if (str.endsWith(suffix)) {
 			return true;
 		}
 		if (str.length() < suffix.length()) {
 			return false;
 		}
 
 		String lcStr = str.substring(str.length() - suffix.length()).toLowerCase();
 		String lcSuffix = suffix.toLowerCase();
 		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 against
substring the substring to match at the given index
 
 	public static boolean substringMatch(CharSequence strint indexCharSequence substring) {
 		for (int j = 0; j < substring.length(); j++) {
 			int i = index + j;
 			if (i >= str.length() || str.charAt(i) != substring.charAt(j)) {
 				return false;
 			}
 		}
 		return true;
 	}

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.
 
 	public static int countOccurrencesOf(String strString sub) {
 		if (str == null || sub == null || str.length() == 0 || sub.length() == 0) {
 			return 0;
 		}
 		int count = 0, pos = 0, idx = 0;
 		while ((idx = str.indexOf(subpos)) != -1) {
 			++count;
 			pos = idx + sub.length();
 		}
 		return count;
 	}

Replace all occurences 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
 
 	public static String replace(String inStringString oldPatternString newPattern) {
 		if (!hasLength(inString) || !hasLength(oldPattern) || newPattern == null) {
 			return inString;
 		}
 		StringBuffer sbuf = new StringBuffer();
 		// output StringBuffer we'll build up
 		int pos = 0; // our position in the old string
 		int index = inString.indexOf(oldPattern);
 		// the index of an occurrence we've found, or -1
 		int patLen = oldPattern.length();
 		while (index >= 0) {
 			sbuf.append(inString.substring(posindex));
 			sbuf.append(newPattern);
 			pos = index + patLen;
 			index = inString.indexOf(oldPatternpos);
 		}
 		sbuf.append(inString.substring(pos));
 		// remember to append any characters to the right of a match
 		return sbuf.toString();
 	}

Delete all occurrences of the given substring.

Parameters:
inString the original String
pattern the pattern to delete all occurrences of
Returns:
the resulting String
 
 	public static String delete(String inStringString pattern) {
 		return replace(inStringpattern"");
 	}

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
 
 	public static String deleteAny(String inStringString charsToDelete) {
 		if (!hasLength(inString) || !hasLength(charsToDelete)) {
 			return inString;
 		}
 		StringBuffer out = new StringBuffer();
 		for (int i = 0; i < inString.length(); i++) {
 			char c = inString.charAt(i);
 			if (charsToDelete.indexOf(c) == -1) {
 				out.append(c);
 			}
 		}
 		return out.toString();
 	}
 
 
 	//---------------------------------------------------------------------
 	// Convenience methods for working with formatted Strings
 	//---------------------------------------------------------------------
 
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
 
 	public static String quote(String str) {
 		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
 
 	public static Object quoteIfString(Object obj) {
 		return (obj instanceof String ? quote((Stringobj) : obj);
 	}

Unqualify a string qualified by a '.' dot character. For example, "this.name.is.qualified", returns "qualified".

Parameters:
qualifiedName the qualified name
 
 	public static String unqualify(String qualifiedName) {
 		return unqualify(qualifiedName'.');
 	}

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
 
 	public static String unqualify(String qualifiedNamechar separator) {
 		return qualifiedName.substring(qualifiedName.lastIndexOf(separator) + 1);
 	}

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
 
 	public static String capitalize(String str) {
 		return changeFirstCharacterCase(strtrue);
 	}

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
 
 	public static String uncapitalize(String str) {
 		return changeFirstCharacterCase(strfalse);
 	}
 
 	private static String changeFirstCharacterCase(String strboolean capitalize) {
 		if (str == null || str.length() == 0) {
 			return str;
 		}
 		StringBuffer buf = new StringBuffer(str.length());
 		if (capitalize) {
 			buf.append(Character.toUpperCase(str.charAt(0)));
 		}
 		else {
 			buf.append(Character.toLowerCase(str.charAt(0)));
 		}
 		buf.append(str.substring(1));
 		return buf.toString();
 	}

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
 
 	public static String getFilename(String path) {
 		if (path == null) {
 			return null;
 		}
 		int separatorIndex = path.lastIndexOf();
 		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
 
 	public static String getFilenameExtension(String path) {
 		if (path == null) {
 			return null;
 		}
 		int sepIndex = path.lastIndexOf();
 		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
 
 	public static String stripFilenameExtension(String path) {
 		if (path == null) {
 			return null;
 		}
 		int sepIndex = path.lastIndexOf();
 		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
 
 	public static String applyRelativePath(String pathString relativePath) {
 		int separatorIndex = path.lastIndexOf();
 		if (separatorIndex != -1) {
 			String newPath = path.substring(0, separatorIndex);
 			if (!relativePath.startsWith()) {
 				newPath += ;
 			}
 			return newPath + relativePath;
 		}
 		else {
 			return 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
 
 	public static String cleanPath(String path) {
 		if (path == null) {
 			return null;
 		}
 
 		// Strip prefix from path to analyze, to not treat it as part of the
 		// first path element. This is necessary to correctly parse paths like
 		// "file:core/../core/io/Resource.class", where the ".." should just
 		// strip the first "core" directory while keeping the "file:" prefix.
 		int prefixIndex = pathToUse.indexOf(":");
 		String prefix = "";
 		if (prefixIndex != -1) {
 			prefix = pathToUse.substring(0, prefixIndex + 1);
 			pathToUse = pathToUse.substring(prefixIndex + 1);
 		}
 		if (pathToUse.startsWith()) {
 			prefix = prefix + ;
 			pathToUse = pathToUse.substring(1);
 		}
 
 		String[] pathArray = delimitedListToStringArray(pathToUse);
 		List pathElements = new LinkedList();
 		int tops = 0;
 
 		for (int i = pathArray.length - 1; i >= 0; i--) {
 			String element = pathArray[i];
 			if (.equals(element)) {
 				// Points to current directory - drop it.
 			}
 			else if (.equals(element)) {
 				// Registering top path found.
 				tops++;
 			}
 			else {
 				if (tops > 0) {
 					// Merging path element with element corresponding to top path.
 					tops--;
 				}
 				else {
 					// Normal path element found.
 					pathElements.add(0, element);
 				}
 			}
 		}
 
 		// Remaining top paths need to be retained.
 		for (int i = 0; i < topsi++) {
 			pathElements.add(0, );
 		}
 
 		return prefix + collectionToDelimitedString(pathElements);
 	}

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
 
 	public static boolean pathEquals(String path1String path2) {
 		return cleanPath(path1).equals(cleanPath(path2));
 	}

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
 
 	public static Locale parseLocaleString(String localeString) {
 		String[] parts = tokenizeToStringArray(localeString"_ "falsefalse);
 		String language = (parts.length > 0 ? parts[0] : "");
 		String country = (parts.length > 1 ? parts[1] : "");
 		String variant = "";
 		if (parts.length >= 2) {
 			// There is definitely a variant, and it is everything after the country
 			// code sans the separator between the country code and the variant.
 			int endIndexOfCountryCode = localeString.indexOf(country) + country.length();
 			// Strip off any leading '_' and whitespace, what's left is the variant.
 			variant = trimLeadingWhitespace(localeString.substring(endIndexOfCountryCode));
 			if (variant.startsWith("_")) {
 				variant = trimLeadingCharacter(variant'_');
 			}
 		}
 		return (language.length() > 0 ? new Locale(languagecountryvariant) : 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
 
 	public static String toLanguageTag(Locale locale) {
 		return locale.getLanguage() + (hasText(locale.getCountry()) ? "-" + locale.getCountry() : "");
 	}
 
 
 	//---------------------------------------------------------------------
 	// Convenience methods for working with String arrays
 	//---------------------------------------------------------------------
 
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)
 
 	public static String[] addStringToArray(String[] arrayString str) {
 		if (ObjectUtils.isEmpty(array)) {
 			return new String[] {str};
 		}
 		String[] newArr = new String[array.length + 1];
 		System.arraycopy(array, 0, newArr, 0, array.length);
 		newArr[array.length] = str;
 		return newArr;
 	}

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)
 
 	public static String[] concatenateStringArrays(String[] array1String[] array2) {
 		if (ObjectUtils.isEmpty(array1)) {
 			return array2;
 		}
 		if (ObjectUtils.isEmpty(array2)) {
 			return array1;
 		}
 		String[] newArr = new String[array1.length + array2.length];
 		System.arraycopy(array1, 0, newArr, 0, array1.length);
 		System.arraycopy(array2, 0, newArrarray1.lengtharray2.length);
 		return newArr;
 	}

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)
 
 	public static String[] mergeStringArrays(String[] array1String[] array2) {
 		if (ObjectUtils.isEmpty(array1)) {
 			return array2;
 		}
 		if (ObjectUtils.isEmpty(array2)) {
 			return array1;
 		}
 		List result = new ArrayList();
 		result.addAll(Arrays.asList(array1));
 		for (int i = 0; i < array2.lengthi++) {
 			String str = array2[i];
 			if (!result.contains(str)) {
 				result.add(str);
 			}
 		}
 		return toStringArray(result);
 	}

Turn given source String array into sorted array.

Parameters:
array the source array
Returns:
the sorted array (never null)
 
 	public static String[] sortStringArray(String[] array) {
 		if (ObjectUtils.isEmpty(array)) {
 			return new String[0];
 		}
 		Arrays.sort(array);
 		return array;
 	}

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)
 
 	public static String[] toStringArray(Collection collection) {
 		if (collection == null) {
 			return null;
 		}
 		return (String[]) collection.toArray(new String[collection.size()]);
 	}

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)
 
 	public static String[] toStringArray(Enumeration enumeration) {
 		if (enumeration == null) {
 			return null;
 		}
 		List list = Collections.list(enumeration);
 		return (String[]) list.toArray(new String[list.size()]);
 	}

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
 
 	public static String[] trimArrayElements(String[] array) {
 		if (ObjectUtils.isEmpty(array)) {
 			return new String[0];
 		}
 		String[] result = new String[array.length];
 		for (int i = 0; i < array.lengthi++) {
 			String element = array[i];
 			result[i] = (element != null ? element.trim() : null);
 		}
 		return result;
 	}

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
 
 	public static String[] removeDuplicateStrings(String[] array) {
 		if (ObjectUtils.isEmpty(array)) {
 			return array;
 		}
 		Set set = new TreeSet();
 		for (int i = 0; i < array.lengthi++) {
 			set.add(array[i]);
 		}
 		return toStringArray(set);
 	}

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
 
 	public static String[] split(String toSplitString delimiter) {
 		if (!hasLength(toSplit) || !hasLength(delimiter)) {
 			return null;
 		}
 		int offset = toSplit.indexOf(delimiter);
 		if (offset < 0) {
 			return null;
 		}
 		String beforeDelimiter = toSplit.substring(0, offset);
 		String afterDelimiter = toSplit.substring(offset + delimiter.length());
 		return new String[] {beforeDelimiterafterDelimiter};
 	}

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 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
 
 	public static Properties splitArrayElementsIntoProperties(String[] arrayString delimiter) {
 		return splitArrayElementsIntoProperties(arraydelimiternull);
 	}

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 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
 
 			String[] arrayString delimiterString charsToDelete) {
 
 		if (ObjectUtils.isEmpty(array)) {
 			return null;
 		}
 		Properties result = new Properties();
 		for (int i = 0; i < array.lengthi++) {
 			String element = array[i];
 			if (charsToDelete != null) {
 				element = deleteAny(array[i], charsToDelete);
 			}
 			String[] splittedElement = split(elementdelimiter);
 			if (splittedElement == null) {
 				continue;
 			}
 			result.setProperty(splittedElement[0].trim(), splittedElement[1].trim());
 		}
 		return result;
 	}

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:
java.util.StringTokenizer
java.lang.String.trim()
delimitedListToStringArray(java.lang.String,java.lang.String)
 
 	public static String[] tokenizeToStringArray(String strString delimiters) {
 		return tokenizeToStringArray(strdelimiterstruetrue);
 	}

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's 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:
java.util.StringTokenizer
java.lang.String.trim()
delimitedListToStringArray(java.lang.String,java.lang.String)
 
 	public static String[] tokenizeToStringArray(
 			String strString delimitersboolean trimTokensboolean ignoreEmptyTokens) {
 
 		if (str == null) {
 			return null;
 		}
 		StringTokenizer st = new StringTokenizer(strdelimiters);
 		List tokens = new ArrayList();
 		while (st.hasMoreTokens()) {
 			String token = st.nextToken();
 			if (trimTokens) {
 				token = token.trim();
 			}
 			if (!ignoreEmptyTokens || token.length() > 0) {
 				tokens.add(token);
 			}
 		}
 		return toStringArray(tokens);
 	}

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)
 
 	public static String[] delimitedListToStringArray(String strString delimiter) {
 		return delimitedListToStringArray(strdelimiternull);
 	}

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)
 
 	public static String[] delimitedListToStringArray(String strString delimiterString charsToDelete) {
 		if (str == null) {
 			return new String[0];
 		}
 		if (delimiter == null) {
 			return new String[] {str};
 		}
 		List result = new ArrayList();
 		if ("".equals(delimiter)) {
 			for (int i = 0; i < str.length(); i++) {
 				result.add(deleteAny(str.substring(ii + 1), charsToDelete));
 			}
 		}
 		else {
 			int pos = 0;
			int delPos = 0;
			while ((delPos = str.indexOf(delimiterpos)) != -1) {
				result.add(deleteAny(str.substring(posdelPos), 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));
		return toStringArray(result);
	}

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
		return delimitedListToStringArray(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
	public static Set commaDelimitedListToSet(String str) {
		Set set = new TreeSet();
		for (int i = 0; i < tokens.lengthi++) {
			set.add(tokens[i]);
		return set;
	}

Convenience method to return a Collection as a delimited (e.g. CSV) String. E.g. useful for toString() 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
	public static String collectionToDelimitedString(Collection collString delimString prefixString suffix) {
		if (CollectionUtils.isEmpty(coll)) {
			return "";
		Iterator it = coll.iterator();
		while (it.hasNext()) {
			sb.append(prefix).append(it.next()).append(suffix);
			if (it.hasNext()) {
				sb.append(delim);
		return sb.toString();
	}

Convenience method to return a Collection as a delimited (e.g. CSV) String. E.g. useful for toString() implementations.

Parameters:
coll the Collection to display
delim the delimiter to use (probably a ",")
Returns:
the delimited String
	public static String collectionToDelimitedString(Collection collString delim) {
		return collectionToDelimitedString(colldelim"""");
	}

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
		return collectionToDelimitedString(coll",");
	}

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 display
delim the delimiter to use (probably a ",")
Returns:
the delimited String
	public static String arrayToDelimitedString(Object[] arrString delim) {
		if (ObjectUtils.isEmpty(arr)) {
			return "";
		for (int i = 0; i < arr.lengthi++) {
			if (i > 0) {
				sb.append(delim);
			sb.append(arr[i]);
		return sb.toString();
	}

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
	public static String arrayToCommaDelimitedString(Object[] arr) {
		return arrayToDelimitedString(arr",");
New to GrepCode? Check out our FAQ X