All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.jawr.web.util.StringUtils Maven / Gradle / Ivy

Go to download

Javascript/CSS bundling and compressing tool for java web apps. By using jawr resources are automatically bundled together and optionally minified and gzipped. Jawr provides tag libraries to reference a generated bundle either by id or by using the name of any of its members.

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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
 */
package net.jawr.web.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * 
 * Utility method for String manipulation.
 * The original code is available in commons-lang.
 * 
 * Below are the original authors of StringUtils.
 * 
 * @see java.lang.String
 * @author Apache Jakarta Turbine
 * @author Jon S. Stevens
 * @author Daniel L. Rall
 * @author Greg Coladonato
 * @author Ed Korthof
 * @author Rand McNeely
 * @author Stephen Colebourne
 * @author Fredrik Westermarck
 * @author Holger Krauth
 * @author Alexander Day Chaffee
 * @author Henning P. Schmiedehausen
 * @author Arun Mammen Thomas
 * @author Gary Gregory
 * @author Phil Steitz
 * @author Al Chou
 * @author Michael Davey
 * @author Reuben Sivan
 * @author Chris Hyzer
 * @author Scott Johnson
 * @since 1.0
 * @version $Id: StringUtils.java 635447 2008-03-10 06:27:09Z bayard $
 */
public class StringUtils {

	/** The new line separator */
	public static final String LINE_SEPARATOR = "\r\n"; 
	//public static final String LINE_SEPARATOR = System.getProperty("line.separator");
	
	/** The string value for line feed */
	public static final String STR_LINE_FEED= "\n"; 
	
	/**
	 * \u000a linefeed LF ('\n').
	 * 
	 * @see JLF: Escape Sequences for Character and String
	 *      Literals
	 * @since 2.2
	 */
	public static final char LF = '\n';

	/**
	 * \u000d carriage return CR ('\r').
	 * 
	 * @see JLF: Escape Sequences for Character and String
	 *      Literals
	 * @since 2.2
	 */
	public static final char CR = '\r';

	/**
	 * The empty String "".
	 * 
	 * @since 2.0
	 */
	public static final String EMPTY = "";

	// Empty checks
	// -----------------------------------------------------------------------
	/**
	 * 

* Checks if a String is empty ("") or null. *

* *
	 * StringUtils.isEmpty(null)      = true
	 * StringUtils.isEmpty("")        = true
	 * StringUtils.isEmpty(" ")       = false
	 * StringUtils.isEmpty("bob")     = false
	 * StringUtils.isEmpty("  bob  ") = false
	 * 
* *

* NOTE: This method changed in Lang version 2.0. It no longer trims the String. That functionality is available in isBlank(). *

* * @param str the String to check, may be null * @return true if the String is empty or null */ public static boolean isEmpty(String str) { return str == null || str.length() == 0; } /** *

Checks if a String is not empty ("") and not null.

* *
     * StringUtils.isNotEmpty(null)      = false
     * StringUtils.isNotEmpty("")        = false
     * StringUtils.isNotEmpty(" ")       = true
     * StringUtils.isNotEmpty("bob")     = true
     * StringUtils.isNotEmpty("  bob  ") = true
     * 
* * @param str the String to check, may be null * @return true if the String is not empty and not null */ public static boolean isNotEmpty(String str) { return !StringUtils.isEmpty(str); } /** * Checks if 2 Strings are equals. * @param cs1 the first string * @param cs2 the second string * @return true if the 2 Strings are equals. */ public static boolean equals(final String cs1, final String cs2) { if (cs1 == cs2) { return true; } if (cs1 == null || cs2 == null) { return false; } return cs1.equals(cs2); } // Count matches // ----------------------------------------------------------------------- /** *

* Counts how many times the substring appears in the larger String. *

* *

* A null or empty ("") String input returns 0. *

* *
	 * StringUtils.countMatches(null, *)       = 0
	 * StringUtils.countMatches("", *)         = 0
	 * StringUtils.countMatches("abba", null)  = 0
	 * StringUtils.countMatches("abba", "")    = 0
	 * StringUtils.countMatches("abba", "a")   = 2
	 * StringUtils.countMatches("abba", "ab")  = 1
	 * StringUtils.countMatches("abba", "xxx") = 0
	 * 
* * @param str the String to check, may be null * @param sub the substring to count, may be null * @return the number of occurrences, 0 if either String is null */ public static int countMatches(String str, String sub) { if (isEmpty(str) || isEmpty(sub)) { return 0; } int count = 0; int idx = 0; while ((idx = str.indexOf(sub, idx)) != -1) { count++; idx += sub.length(); } return count; } // Chopping // ----------------------------------------------------------------------- /** *

* Remove the last character from a String. *

* *

* If the String ends in \r\n, then remove both of them. *

* *
	 * StringUtils.chop(null)          = null
	 * StringUtils.chop("")            = ""
	 * StringUtils.chop("abc \r")      = "abc "
	 * StringUtils.chop("abc\n")       = "abc"
	 * StringUtils.chop("abc\r\n")     = "abc"
	 * StringUtils.chop("abc")         = "ab"
	 * StringUtils.chop("abc\nabc")    = "abc\nab"
	 * StringUtils.chop("a")           = ""
	 * StringUtils.chop("\r")          = ""
	 * StringUtils.chop("\n")          = ""
	 * StringUtils.chop("\r\n")        = ""
	 * 
* * @param str the String to chop last character from, may be null * @return String without last character, null if null String input */ public static String chop(String str) { if (str == null) { return null; } int strLen = str.length(); if (strLen < 2) { return EMPTY; } int lastIdx = strLen - 1; String ret = str.substring(0, lastIdx); char last = str.charAt(lastIdx); if (last == LF) { if (ret.charAt(lastIdx - 1) == CR) { return ret.substring(0, lastIdx - 1); } } return ret; } /** *

Removes separator from the end of * str if it's there, otherwise leave it alone.

* *

NOTE: This method changed in version 2.0. * It now more closely matches Perl chomp. * For the previous behavior, use {@link #substringBeforeLast(String, String)}. * This method uses {@link String#endsWith(String)}.

* *
     * StringUtils.chomp(null, *)         = null
     * StringUtils.chomp("", *)           = ""
     * StringUtils.chomp("foobar", "bar") = "foo"
     * StringUtils.chomp("foobar", "baz") = "foobar"
     * StringUtils.chomp("foo", "foo")    = ""
     * StringUtils.chomp("foo ", "foo")   = "foo "
     * StringUtils.chomp(" foo", "foo")   = " "
     * StringUtils.chomp("foo", "foooo")  = "foo"
     * StringUtils.chomp("foo", "")       = "foo"
     * StringUtils.chomp("foo", null)     = "foo"
     * 
* * @param str the String to chomp from, may be null * @param separator separator String, may be null * @return String without trailing separator, null if null String input */ public static String chomp(String str, String separator) { if (isEmpty(str) || separator == null) { return str; } if (str.endsWith(separator)) { return str.substring(0, str.length() - separator.length()); } return str; } /** *

Remove a value if and only if the String ends with that value.

* * @param str the String to chomp from, must not be null * @param sep the String to chomp, must not be null * @return String without chomped ending * @throws NullPointerException if str or sep is null */ public static String chompLast(String str, String sep) { if (str.length() == 0) { return str; } String sub = str.substring(str.length() - sep.length()); if (sep.equals(sub)) { return str.substring(0, str.length() - sep.length()); } return str; } /** * Split the String passed in parameter, the trailing empty string are kept. * @param str the string to split * @param separator the separator * @return the splitted string */ public static String[] split(String str, String separator){ return Pattern.compile(separator).split(str, -1); } /** * Normalize the line feed of the String. "\r\n" is replaced by "\n" * @param value the value to normalized * @return the normalized value */ public static String normalizeLineFeed(String value){ return value.replace("\r\n", "\n"); } /** * Take a {@code String} that is a delimited list and convert it into a * {@code String} array. *

A single {@code 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 * {@link #tokenizeToStringArray}. * @param str the input {@code String} * @param delimiter the delimiter between elements (this is a single delimiter, * rather than a bunch individual delimiter characters) * @return an array of the tokens in the list * @see #tokenizeToStringArray */ public static String[] delimitedListToStringArray(String str, String delimiter) { return delimitedListToStringArray(str, delimiter, null); } /** * Take a {@code String} that is a delimited list and convert it into * a {@code String} array. *

A single {@code 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 * {@link #tokenizeToStringArray}. * @param str the input {@code String} * @param delimiter the delimiter between elements (this is a single delimiter, * rather than a bunch individual delimiter characters) * @param 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 {@code String} * @return an array of the tokens in the list * @see #tokenizeToStringArray */ public static String[] delimitedListToStringArray(String str, String delimiter, String 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(i, i + 1), charsToDelete)); } } else { int pos = 0; int delPos; 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)); } } return toStringArray(result); } /** * Convert a comma delimited list (e.g., a row from a CSV file) into an * array of strings. * @param str the input {@code String} * @return an array of strings, or the empty array in case of empty input */ public static String[] commaDelimitedListToStringArray(String str) { return delimitedListToStringArray(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 {@link LinkedHashSet}. * @param str the input {@code String} * @return a set of {@code String} entries in the list * @see #removeDuplicateStrings(String[]) */ public static Set commaDelimitedListToSet(String str) { Set set = new LinkedHashSet(); String[] tokens = commaDelimitedListToStringArray(str); for (String token : tokens) { set.add(token); } return set; } /** * Convert a {@link Collection} to a delimited {@code String} (e.g. CSV). *

Useful for {@code toString()} implementations. * @param coll the {@code Collection} to convert * @param delim the delimiter to use (typically a ",") * @param prefix the {@code String} to start each element with * @param suffix the {@code String} to end each element with * @return the delimited {@code String} */ public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) { if (coll == null || coll.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); Iterator it = coll.iterator(); while (it.hasNext()) { sb.append(prefix).append(it.next()).append(suffix); if (it.hasNext()) { sb.append(delim); } } return sb.toString(); } /** * Convert a {@code Collection} into a delimited {@code String} (e.g. CSV). *

Useful for {@code toString()} implementations. * @param coll the {@code Collection} to convert * @param delim the delimiter to use (typically a ",") * @return the delimited {@code String} */ public static String collectionToDelimitedString(Collection coll, String delim) { return collectionToDelimitedString(coll, delim, "", ""); } /** * Convert a {@code Collection} into a delimited {@code String} (e.g., CSV). *

Useful for {@code toString()} implementations. * @param coll the {@code Collection} to convert * @return the delimited {@code String} */ public static String collectionToCommaDelimitedString(Collection coll) { return collectionToDelimitedString(coll, ","); } /** * Copy the given {@code Collection} into a {@code String} array. *

The {@code Collection} must contain {@code String} elements only. * @param collection the {@code Collection} to copy * @return the {@code String} array ({@code null} if the supplied * {@code Collection} was {@code null}) */ public static String[] toStringArray(Collection collection) { if (collection == null) { return null; } return collection.toArray(new String[collection.size()]); } /** * Copy the given Enumeration into a {@code String} array. * The Enumeration must contain {@code String} elements only. * @param enumeration the Enumeration to copy * @return the {@code String} array ({@code null} if the passed-in * Enumeration was {@code null}) */ public static String[] toStringArray(Enumeration enumeration) { if (enumeration == null) { return null; } List list = Collections.list(enumeration); return list.toArray(new String[list.size()]); } /** * Delete any character in a given {@code String}. * @param inString the original {@code String} * @param charsToDelete a set of characters to delete. * E.g. "az\n" will delete 'a's, 'z's and new lines. * @return the resulting {@code String} */ public static String deleteAny(String inString, String charsToDelete) { if (isEmpty(inString) || isEmpty(charsToDelete)) { return inString; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < inString.length(); i++) { char c = inString.charAt(i); if (charsToDelete.indexOf(c) == -1) { sb.append(c); } } return sb.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy