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

io.craft.atom.util.StringUtil Maven / Gradle / Ivy

There is a newer version: 3.1.2
Show newest version
package io.craft.atom.util;

import java.text.NumberFormat;
import java.util.Locale;
import java.util.Random;

/**
 * A string utility class that manipulates string.
 * It is null safe, means it handles input string quietly.
 * That is to say if a null input will return null, 
 * there is no NullPointerException will be thrown.
 *
 * @author mindwind
 * @version 1.0, 2006-12-23
 */
public class StringUtil {
	
	/**
	 * Convert from DBC case to SBC case.
	 * 
	 * @param src 
	 * @return SBC case string
	 */
	public static String dbc2sbcCase(String src) {
		if (src == null) {
			return null;
		}
		
		char[] c = src.toCharArray();
		for (int i = 0; i < c.length; i++) {
			// WHITESPCE ASCII-32
			if (c[i] == 32) {
				c[i] = (char) 12288;
				continue;
			}
			
			// ASCII character 33-126 <-> unicode 65281-65374
			if (c[i] < 127)
				c[i] = (char) (c[i] + 65248);
		}
		
		return new String(c);
	}
	
	/**
	 * Convert from SBC case to DBC case
	 * 
	 * @param src
	 * @return DBC case
	 */
	public static String sbc2dbcCase(String src) {
		if (src == null) {
			return null;
		}
		char[] c = src.toCharArray();
		for (int i = 0; i < c.length; i++) {
			// WHITESPCE ASCII-32
			if (c[i] == 12288) {
				c[i] = (char) 32;
				continue;
			}
			
			// ASCII character 33-126 <-> unicode 65281-65374
			if (c[i] > 65280 && c[i] < 65375) {
				c[i] = (char) (c[i] - 65248);
			}
		}
		return new String(c);
	}
	
	/**
	 * Convert a string array to a string using delim as separator. If array == null return null.
	 * 
	 * @param array
	 * @param delim if delim == null, convert to ""
	 * @return a new concatenated string
	 */
	public static String toString(String[] array, String delim) {
		if (array == null) {
			return null;
		}
		
		int length = array.length - 1;
		if (delim == null) {
			delim = "";
		}
		
		StringBuilder buf = new StringBuilder(length * 8);
		for (int i = 0; i < length; i++) {
			buf.append(array[i]);
			buf.append(delim);
		}
		buf.append(array[length]);
		
		return buf.toString();
	}
	
	/**
	 * Judge the string within a string array or not.
*
  • strings == null("") return false *
  • string == null("") return false * * @param strings * @param string * @param caseSensitive * @return true if string within the string array, otherwise false */ public static boolean contains(String[] strings, String string, boolean caseSensitive) { if (strings == null || strings.length == 0) { return false; } if (string == null || string.length() == 0) { return false; } for (int i = 0; i < strings.length; i++) { if (caseSensitive == true) { if (strings[i].equals(string)) { return true; } } else { if (strings[i].equalsIgnoreCase(string)) { return true; } } } return false; } /** * Judge the string within a string array or not, if the string is a substring of any string in the array return true.
    *
  • strings == null("") return false *
  • string == null("") return false * * @param strings * @param string * @param caseSensitive * @return true if string or its substring within the string array, otherwise false */ public static boolean containSubstring(String[] strings, String string, boolean caseSensitive) { if (strings == null || strings.length == 0) { return false; } if (string == null || string.length() == 0) { return false; } for (int i = 0; i < strings.length; i++) { if (caseSensitive == true) { if (strings[i].equals(string) || strings[i].indexOf(string) > -1) { return true; } } else { if (strings[i].equalsIgnoreCase(string) || strings[i].toLowerCase().indexOf(string.toLowerCase()) > -1) { return true; } } } return false; } /** * Count the number of target string occur in the source. * * @param src * @param target * @return the number of target string occur in the source */ public static int count(String src, String target) { int count = 0; int index = src.indexOf(target); while (index != -1) { count++; index = src.indexOf(target, index + 1); } return count; } /** * Convert first char to lower case * * @param src * @return string which first char converted to lower case */ public static String firstCharToLowerCase(String src) { if (src.length() == 1) { return src.substring(0, 1).toLowerCase(); } else { return src.substring(0, 1).toLowerCase() + src.substring(1); } } /** * Convert first char to upper case * * @param src * @return string which first char converted to upper case */ public static String firstCharToUpperCase(String src) { if (src.length() == 1) { return src.substring(0, 1).toUpperCase(); } else { return src.substring(0, 1).toUpperCase() + src.substring(1); } } /** * Convert a string to currency string * * @param src * @param locale * @return The currency format string */ public static String toCurrencyString(String src, Locale locale) { Double currency = Double.parseDouble(src); return toCurrencyString(currency, locale); } /** * Convert a double to currency string. * * @param src * @param locale * @return The currency format string */ public static String toCurrencyString(Double src, Locale locale) { if (src == null) { throw new NullPointerException("src == null"); } NumberFormat nf = NumberFormat.getCurrencyInstance(locale); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); return nf.format(src); } /** * Using value to replace variable which with a specified prefix in the src string. *
    * Note: it's not a nested process, if the values array has variable ignore it. * *
    	 * variable = prefix + num (num start from 1)
    * eg: * abc%1def%2ghi%3jk, like %1 is variable * abc$1def$2, like $1 is variable and prefix is $ *
    * *
  • if src == null or values == null or values.length == 0 return src itself. *
  • if values.length > variable num, ignore redundant value. *
  • if values.length < variable num, use the last value replace the redundant variable. * * @param prefix variable prefix, if prefix is null using default prefix "%" * @param src * @param value * @return replaced string */ public static String replace(String prefix, String src, String value) { String[] values = new String[1]; values[0] = value; return replace(prefix, src, values); } public static String getReplaceString(String src, String[] values) { return replace("%", src, values); } /** * Using values string array to replace variable which with a specified prefix in the src string. *
    * Note: it's not a nested process, if the values array has variable ignore it. * *
    	 * variable = prefix + num (num start from 1)
    * eg: * abc%1def%2ghi%3jk, like %1 is variable * abc$1def$2, like $1 is variable and prefix is $ *
    * *
  • if src == null or values == null or values.length == 0 return src itself. *
  • if values.length > variable num, ignore redundant value. *
  • if values.length < variable num, use the last value replace the redundant variable. * * @param prefix variable prefix, if prefix is null using default prefix "%" * @param src * @param values * @return replaced string */ public static String replace(String prefix, String src, String[] values) { if (src == null || values == null || values.length < 1) { return src; } if (prefix == null) { prefix = "%"; } StringBuilder result = new StringBuilder(); int beginIndex = 0; for (int i = 0, count = 0; true; i++) { String argument = prefix + Integer.toString(i + 1); int endIndex = src.indexOf(argument, beginIndex); count++; if (endIndex != -1) { int len = Integer.valueOf(count).toString().length() + 1; StringBuilder part = new StringBuilder(src.substring(beginIndex, endIndex)); if (i < values.length) { part.append(values[i]); } else { part.append(values[values.length - 1]); } result.append(part); beginIndex = endIndex + len; } else { result.append(src.substring(beginIndex)); break; } } return result.toString(); } /** * Insert target string to src string at index position. If index is invalid return original string. * * @param src * @param target * @param index * @return string after inserted. */ public static String insert(String src, String target, int index) { if (src == null) { return src; } if (index < 0 || index > src.length()) { return src; } StringBuilder sb = new StringBuilder(); if (index != 0) { sb.append(src.substring(0, index)); } sb.append(target); sb.append(src.substring(index)); return sb.toString(); } /** *

    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
         * 
    * * @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 whitespace, empty ("") or null.

    * *
         * StringUtils.isBlank(null)      = true
         * StringUtils.isBlank("")        = true
         * StringUtils.isBlank(" ")       = true
         * StringUtils.isBlank("bob")     = false
         * StringUtils.isBlank("  bob  ") = false
         * 
    * * @param str the String to check, may be null * @return true if the String is null, empty or whitespace */ public static boolean isBlank(String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { if ((Character.isWhitespace(str.charAt(i)) == false)) { return false; } } return true; } /** *

    * Checks if some strings has any empty string. *

    * If strings == null, return true * * @param strings * @return true is any string is empty, otherwise false. */ public static boolean isAnyEmpty(String... strings) { if (strings == null) { return true; } for (String s : strings) { if (isEmpty(s)) { return true; } } return false; } /** * Checks if some strings has any blank string.
    * If strings == null, return true * * @param strings * @return true if any string is blank, otherwise false. */ public static boolean isAnyBlank(String... strings) { if (strings == null) { return true; } for (String s : strings) { if (isBlank(s)) { return true; } } return false; } /** * Checks if all string is empty. If strings == null, return true * * @param strings * @return true if all string is empty, otherwise false. */ public static boolean isAllEmpty(String... strings) { if (strings == null) { return true; } boolean b = true; for (String s : strings) { b &= isEmpty(s); } return b; } /** * Checks if all string is blank. If strings == null, return true * * @param strings * @return true if all string is blank, otherwise false. */ public static boolean isAllBlank(String... strings) { if (strings == null) { return true; } boolean b = true; for (String s : strings) { b &= isBlank(s); } return b; } /** * Checks if all the strings is not blank. * * @param strings * @return true if all string is not blank, otherwise false. */ public static boolean isAllNotBlank(String... strings) { if (isAnyBlank(strings)) { return false; } return true; } /** * Checks if all the strings is not empty. * * @param strings * @return true if all string is not empty, otherwise false. */ public static boolean isAllNotEmpty(String... strings) { if (isAnyEmpty(strings)) { return false; } return true; } /** * Check if the string is a digital string, eg: 123 or 123.58 etc. * * @param src * @return true if string is digital */ public static boolean isDigitalString(String src) { if (src == null) { return false; } for (int i = 0; i < src.length(); i++) { if (Character.isDigit(src.charAt(i)) || src.charAt(i) == '.') { continue; } else { return false; } } return true; } /** * 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
    	 * 
    * * @param src * the CharSequence to check (may be null) * @return true if the CharSequence is not null and has length * @see #hasText(CharSequence) */ public static boolean hasLength(CharSequence src) { return (src != null && src.length() > 0); } /** * 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
    	 * 
    * * @param str * the CharSequence to check (may be null) * @return true if the CharSequence is not null, * its length is greater than 0, and it does not contain whitespace * only * @see java.lang.Character#isWhitespace */ public static boolean hasText(CharSequence str) { if (!hasLength(str)) { return false; } int strLen = str.length(); for (int i = 0; i < strLen; i++) { if (!Character.isWhitespace(str.charAt(i))) { return true; } } return false; } /** * Trim all whitespace from the given string: leading, trailing, and inbetween characters. * * @param src * @return string trimmed. * @see java.lang.Character#isWhitespace */ public static String trimAll(String src) { if (!hasLength(src)) { return src; } StringBuilder sb = new StringBuilder(src); int index = 0; while (sb.length() > index) { if (Character.isWhitespace(sb.charAt(index))) { sb.deleteCharAt(index); } else { index++; } } return sb.toString(); } /** * Trim leading whitespace from the given string. * * @param str * the String to check * @return the trimmed String * @see java.lang.Character#isWhitespace */ public static String trimLeading(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) { sb.deleteCharAt(0); } return sb.toString(); } /** * Trim trailing whitespace from the given string. * * @param str * @return the trimmed String * @see java.lang.Character#isWhitespace */ public static String trimTrailing(String str) { if (!hasLength(str)) { return str; } StringBuilder sb = new StringBuilder(str); while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); } /** * Random split a string into number of segments. * * @param num * @return the array of strings split. */ public static String[] split(String str, int num) { if (str == null) { return null; } if (num <= 1) { return new String[] { str }; } String[] sarr = null; int len = str.length(); if (num >= len) { sarr = new String[len]; for (int i = 0; i < len; i++) { sarr[i] = Character.toString(str.charAt(i)); } return sarr; } Random ran = new Random(); int scope = len / num; int start = 0; int end = 0; sarr = new String[num]; for (int i = 0; i < num; i++) { if (i == num - 1) { sarr[i] = str.substring(start); } else { end = ran.nextInt(scope) + start; sarr[i] = str.substring(start, end); start = end; } } return sarr; } // ~ -------------------------------------------------------------------------------------------------------------- private StringUtil() { throw new UnsupportedOperationException(); } }




  • © 2015 - 2024 Weber Informatics LLC | Privacy Policy