对字符String进行处理

/*******************************************************************************
 * Copyright (c) 2013.  Pyrlong All rights reserved.
 *
 * 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 com.icos.utility.string;

import java.io.UnsupportedEncodingException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.lang.String.valueOf;

/**
 * 处理字符串的工具类.
 *
 * @version 2.0
 */
public class StringUtil {

	/**
	 * 空字符常量
	 */
	public static final String EMPTY = "";

	/**
	 * 索引字符数
	 */
	public static final int INDEX_NOT_FOUND = -1;

	static FixSizeMap<String, Pattern> cachedPattern = null;

	/**
	 * 限制字符数
	 */
	@SuppressWarnings("unused")
	private static final int PAD_LIMIT = 8192;
	// private static Logger logger = Logger.getLogger(StringUtil.class);

	/**
	 * Instantiates a new string util.
	 */
	public StringUtil() {
		super();
	}

	public static int getCRC32INTID(String str) {
		int[] table = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
				0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
				0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
				0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
				0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
				0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
				0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
				0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
				0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
				0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
				0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
				0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
				0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
				0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
				0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
				0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
				0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
				0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
				0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
				0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
				0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
				0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
				0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
				0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
				0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
				0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
				0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
				0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
				0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
				0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
				0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
				0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, };
		byte[] bytes = str.getBytes();
		int crc = 0xffffffff;
		for (byte b : bytes) {
			crc = (crc >>> 8 ^ table[(crc ^ b) & 0xff]);
		}
		crc = crc ^ 0xffffffff;

		// return Integer.toHexString(crc);
		return crc;
	}

	public static String pad(int colLength, int tabPos) {
		StringBuilder sAppend = new StringBuilder();
		for (int len = tabPos - colLength; len != -1; len--) {
			sAppend.append(' ');
		}

		return sAppend.toString();
	}

	public static String paint(char c, int amount) {
		StringBuilder append = new StringBuilder();
		for (; amount != -1; amount--) {
			append.append(c);
		}
		return append.toString();
	}

	public static String padTwo(Object first, Object second, int tab) {
		return new StringBuilder(valueOf(first)).append(pad(valueOf(first).length(), tab)).append(second).toString();
	}

	/**
	 * 功能描述: 判读字符序列为空
	 *
	 * @param cs
	 *            CharSequence实例
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isEmpty(CharSequence cs) {
		return cs == null || cs.length() == 0;
	}

	public static Object strDecode1(String input, Object name, Object value, Object elseValue) {
		return strDecode(input, name, value, elseValue);
	}

	public static Object strDecode(String input, Object... args) {
		int count = args.length;
		if (count == 0)
			return input;
		Object name = null;
		Object value = null;
		for (Object o : args) {
			if (name == null) {
				name = o;
			} else if (value == null) {
				value = o;
				if (input.equals(name))
					return value;
				name = null;
				value = null;
			}
		}
		if (args.length % 2 == 1)
			return args[args.length - 1];
		return input;
	}

	/**
	 * 功能描述:判断字符序列不空
	 *
	 * @param cs
	 *            CharSequence实例
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isNotEmpty(CharSequence cs) {
		return !StringUtil.isEmpty(cs);
	}

	/**
	 * 功能描述: 判断字符序列是空格
	 *
	 * @param cs
	 *            CharSequence实例 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isBlank(CharSequence cs) {
		int strLen;
		if (cs == null || (strLen = cs.length()) == 0) {
			return true;
		}
		for (int i = 0; i < strLen; i++) {
			if ((Character.isWhitespace(cs.charAt(i)) == false)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 功能描述: 判断字符序列不是空格
	 *
	 * @param cs
	 *            CharSequence实例 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isNotBlank(CharSequence cs) {
		return !StringUtil.isBlank(cs);
	}

	/**
	 * Trim.
	 *
	 * @param str
	 *            the str
	 * @return the string
	 */
	public static String trim(String str) {
		return str == null ? null : str.trim();
	}

	/**
	 * 功能描述: 判断字符序列是空格,还是为null
	 *
	 * @param str
	 *            String对象
	 * @return String 返回一个字符串
	 * @since 2011.02.24
	 */
	public static String trimToNull(String str) {
		String ts = trim(str);
		return isEmpty(ts) ? null : ts;
	}

	/**
	 * 功能描述: 判断字符序列是空格,还是为空
	 *
	 * @param str
	 *            String对象
	 * @return String 返回一个字符串
	 * @since 2011.02.24
	 */
	public static String trimToEmpty(String str) {
		return str == null ? EMPTY : str.trim();
	}

	/**
	 * 功能描述:给定2个字符串,进行比较
	 *
	 * @param str1
	 *            String对象
	 * @param str2
	 *            String对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean equalsIgnoreCase(String str1, String str2) {
		return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
	}

	/**
	 * 功能描述:给定一个字符串,和一个字符所在的位置,返回这一字符的位置
	 *
	 * @param str
	 *            String对象
	 * @param searchChar
	 *            int类型数值
	 * @return int int类型数值
	 * @since 2011.02.24
	 */
	public static int indexOf(String str, int searchChar) {
		if (isEmpty(str)) {
			return INDEX_NOT_FOUND;
		}
		return str.indexOf(searchChar);
	}

	/**
	 * 功能描述:给定一个字符串,和一个字符所在的位置,以及一个索引数组;得到之间的间隔的字符数值
	 *
	 * @param str
	 *            String对象
	 * @param searchChar
	 *            int类型数值
	 * @param startPos
	 *            int类型数值
	 * @return int int类型数值
	 * @since 2011.02.24
	 */
	public static int indexOf(String str, int searchChar, int startPos) {
		if (isEmpty(str)) {
			return INDEX_NOT_FOUND;
		}
		return str.indexOf(searchChar, startPos);
	}

	/**
	 * 功能描述:给定2个字符串,查询第二个字符串,在第一个字符串中的位置
	 *
	 * @param str
	 *            String对象
	 * @param searchStr
	 *            String类型数值
	 * @return int int类型数值
	 * @since 2011.02.24
	 */
	public static int indexOf(String str, String searchStr) {
		if (str == null || searchStr == null) {
			return INDEX_NOT_FOUND;
		}
		return str.indexOf(searchStr);
	}

	/**
	 * 功能描述:给定一个字符串,和一个int值;判断这个索引值,是否存在
	 *
	 * @param str
	 *            String对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean contains(String str, int searchChar) {
		if (isEmpty(str)) {
			return false;
		}
		return str.indexOf(searchChar) >= 0;
	}

	/**
	 * 功能描述:给定2个字符串;判断第二个字符串是否在第一个字符串中存在
	 *
	 * @param str
	 *            String对象
	 * @param searchStr
	 *            String对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean contains(String str, String searchStr) {
		if (str == null || searchStr == null) {
			return false;
		}
		return str.indexOf(searchStr) >= 0;
	}

	/**
	 * 功能描述:给定一个字符串,判断字符串中是否有空格
	 *
	 * @param str
	 *            String对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean containsWhitespace(String str) {
		if (isEmpty(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 功能描述:给定一个字符串,和一个int类型的数值;得到一个子串
	 *
	 * @param str
	 *            String对象
	 * @param start
	 *            int类型数值
	 * @return String 字符串
	 * @since 2011.02.24
	 */
	public static String substring(String str, int start) {
		if (str == null) {
			return null;
		}

		if (start < 0) {
			start = str.length() + start; // remember start is negative
		}

		if (start < 0) {
			start = 0;
		}
		if (start > str.length()) {
			return EMPTY;
		}

		return str.substring(start);
	}

	/**
	 * 功能描述:给定一个字符串,和两个int类型的数值;得到一个子串
	 *
	 * @param str
	 *            String对象
	 * @param start
	 *            int类型数值
	 * @param end
	 *            int类型数值
	 * @return String 字符串
	 * @since 2011.02.24
	 */
	public static String substring(String str, int start, int end) {
		if (str == null) {
			return null;
		}
		// handle negatives
		if (end < 0) {
			end = str.length() + end; // remember end is negative
		}
		if (start < 0) {
			start = str.length() + start; // remember start is negative
		}
		// check length next
		if (end > str.length()) {
			end = str.length();
		}
		// if start is greater than end, return ""
		if (start > end) {
			return EMPTY;
		}
		if (start < 0) {
			start = 0;
		}
		if (end < 0) {
			end = 0;
		}
		return str.substring(start, end);
	}

	/**
	 * 功能描述:给定一个字符串,和一个int类型的数值;得到0 到这个int类型之间的字符串
	 *
	 * @param str
	 *            String对象
	 * @param len
	 *            int类型数值
	 * @return String 字符串
	 * @since 2011.02.24
	 */
	public static String left(String str, int len) {
		if (str == null) {
			return null;
		}
		if (len < 0) {
			return EMPTY;
		}
		if (str.length() <= len) {
			return str;
		}
		return str.substring(0, len);
	}

	/**
	 * 功能描述:给定一个字符串,删除这个字符之中的的空格
	 *
	 * @param str
	 *            String对象
	 * @return String 字符串
	 * @since 2011.02.24
	 */
	public static String deleteWhitespace(String str) {
		if (isEmpty(str)) {
			return str;
		}
		int sz = str.length();
		char[] chs = new char[sz];
		int count = 0;
		for (int i = 0; i < sz; i++) {
			if (!Character.isWhitespace(str.charAt(i))) {
				chs[count++] = str.charAt(i);
			}
		}
		if (count == sz) {
			return str;
		}
		return new String(chs, 0, count);
	}

	/**
	 * 功能描述:给定一个字符串,和一个字符。删除这个字符在字符串中的位置
	 *
	 * @param str
	 *            String对象
	 * @return String 字符串
	 * @since 2011.02.24
	 */
	public static String remove(String str, char remove) {
		if (isEmpty(str) || str.indexOf(remove) == INDEX_NOT_FOUND) {
			return str;
		}
		char[] chars = str.toCharArray();
		int pos = 0;
		for (int i = 0; i < chars.length; i++) {
			if (chars[i] != remove) {
				chars[pos++] = chars[i];
			}
		}
		return new String(chars, 0, pos);
	}

	/**
	 * 功能描述:给定两个字符串,找到这两个字符串中字符匹配的个数
	 *
	 * @param str
	 *            String对象
	 * @param sub
	 *            String对象
	 * @return int int类型数值
	 * @since 2011.02.24
	 */
	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)) != INDEX_NOT_FOUND) {
			count++;
			idx += sub.length();
		}
		return count;
	}

	/**
	 * 功能描述:判断是否为null或空值
	 *
	 * @param str
	 *            String对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isBlank(String str) {
		return str == null || str.trim().length() == 0 || "null".equalsIgnoreCase(str)
				|| "undefined".equalsIgnoreCase(str) || str == "";
	}

	/**
	 * 功能描述:判断一个List对象为空;或是空对象
	 *
	 * @param l
	 *            List对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isBlank(List l) {
		return l == null || l.size() == 0;
	}

	/**
	 * 功能描述:判断一个字符串数组对象为空;或是空对象
	 *
	 * @param strArray
	 *            String[]对象
	 * @return boolean 布尔值
	 * @since 2011.02.24
	 */
	public static boolean isBlank(String[] strArray) {
		return strArray == null || strArray.length == 0;
	}

	/**
	 * 功能描述: 将对象转换为String,如果对象为null,则返回 ""
	 *
	 * @param object
	 *            任意的Object对象
	 * @return String String对象
	 * @since 2011.02.24
	 */
	public static String toString(Object object) {
		return (object == null ? "" : object.toString().trim());
	}

	/**
	 * 功能描述: 转换成两位小数
	 *
	 * @param dDouble
	 *            Double对象
	 * @return Double Double对象
	 * @since 2011.02.24
	 */
	public static Double formatDigitDouble(Double dDouble) {
		return (double) Math.round(dDouble * 100) / 100;
	}

	/**
	 * 功能描述: 给定一个字符串,得到一个表达式字符串
	 *
	 * @param temp
	 *            String对象
	 * @return String String对象
	 * @since 2011.02.24
	 */
	public static String getExpressionString(String temp) {

		try {
			temp = temp.replace(']', '[');

			StringBuilder sb = new StringBuilder();

			Boolean append = true;
			do {
				int index = temp.indexOf("[");
				if (append) {
					sb.append(temp.substring(0, index));
					append = false;
				} else {
					append = true;
				}

				temp = temp.substring(index + 1);
			} while (temp.contains("["));

			sb.append(temp);

			temp = sb.toString();
			temp = temp.replace("||", "或");
			temp = temp.replace("&&", "且");

			return temp;
		} catch (Exception ex) {
			ex.printStackTrace();
			return temp;
		}

	}

	/**
	 * 功能描述: 字符串转换
	 *
	 * @param temp
	 *            String对象
	 * @return String String对象
	 * @since 2011.02.24
	 */
	public static String convertString(String temp) {
		if (temp == null) {
			return "";
		} else {
			return temp;
		}
	}

	/**
	 * 将byte[]转换为String类型(使用默认字符集)
	 *
	 * @param target
	 *            要转换的byte[]
	 * @return String 转换后的结果
	 */
	public static String bytesToString(byte[] target) {
		return new String(target);
	}

	/**
	 * 将byte[]转换为String类型
	 *
	 * @param target
	 *            要转换的byte[]
	 * @param charsetName
	 *            字符集名称
	 * @return String 转换后的结果
	 * @throws UnsupportedEncodingException
	 */
	public static String bytesToString(byte[] target, String charsetName) throws UnsupportedEncodingException {
		return new String(target, charsetName);
	}

	/**
	 * 将int类型转换为byte[]
	 *
	 * @param target
	 *            要转换的int
	 * @return byte[] 转换后的结果
	 */
	public static byte[] intToBytes(int target) {

		byte[] digit = new byte[4];

		digit[3] = (byte) target;
		digit[2] = (byte) (target >> 8);
		digit[1] = (byte) (target >> 16);
		digit[0] = (byte) (target >> 24);

		return digit;
	}

	/**
	 * 将long类型转换为byte[]
	 *
	 * @param target
	 *            要转换的long
	 * @return byte[] 转换后的结果
	 */
	public static byte[] longToBytes(long target) {

		byte[] digit = new byte[8];

		digit[7] = (byte) target;
		digit[6] = (byte) (target >> 8);
		digit[5] = (byte) (target >> 16);
		digit[4] = (byte) (target >> 24);
		digit[3] = (byte) (target >> 32);
		digit[2] = (byte) (target >> 40);
		digit[1] = (byte) (target >> 48);
		digit[0] = (byte) (target >> 56);

		return digit;
	}

	/**
	 * 将String类型转换为byte[](使用默认字符集)
	 *
	 * @param target
	 *            要转换的String
	 * @return byte[] 转换后的结果
	 */
	public static byte[] stringToBytes(String target) {
		return target.getBytes();
	}

	/**
	 * 将String类型转换为byte[]
	 *
	 * @param target
	 *            要转换的String
	 * @param charsetName
	 *            字符集名称
	 * @return byte[] 转换后的结果
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] stringToBytes(String target, String charsetName) throws UnsupportedEncodingException {

		return target.getBytes(charsetName);
	}

	public static String replaceLineationToNull(String str) {
		if (!isBlank(str)) {
			if (str.trim().equals("-") || str.trim().equals("--")) {
				return "";
			} else {
				return str.trim();
			}
		}
		return "";
	}

	/**
	 * 分析分隔符,并将特殊分隔符进行转义
	 *
	 * @param strLine
	 * @return
	 */
	public static String replaceSpcChar(String strLine) {
		StringBuffer st = new StringBuffer();
		for (int n = 0; n < strLine.length(); n++) {
			char ch = strLine.charAt(n);
			if (ch == '|' || ch == '$' || ch == '\\' || ch == '.') {
				st.append("\\");
			}
			st.append(ch);
		}
		return st.toString();
	}

	/**
	 * @param value
	 * @return
	 */
	public static String getString(Object value) {
		if (value instanceof Date) {
			return ((Date) value).toString();
		} else {
			return value == null ? "" : value.toString();
		}
	}

	public static boolean isNullObjOrNotString(Object obj) {
		if (null == obj || !(obj instanceof String)) {
			return true;
		}
		return false;
	}

	/*
	 * 将多个文本字符串合并成一个(最多支持30个)
	 *
	 * @param text it's type must be String or List
	 */
	public static String concatText(Object text) {
		String returnValue = null;
		StringBuilder sb = null;
		if (null == text) {
			return returnValue;
		} else {
			if (text instanceof String) {
				sb = new StringBuilder();
				String[] strs = text.toString().split(",");
				for (int m = 0; m < strs.length; m++) {
					sb.append(strs[m]);
				}
				returnValue = sb.toString();
			} else if (text instanceof List) {
				List list = (List) text;
				if (list.size() > 30) {
					list = list.subList(0, 29);
				}
				Iterator it = (list).listIterator();
				sb = new StringBuilder();
				while (it.hasNext()) {
					sb.append(it.next());
				}
				returnValue = sb.toString();
			}
		}
		return returnValue;
	}

	/*
	 * 比较两个字符串是否完全相同(区分大小写),返回 真 或 假
	 *
	 * @param textFirst it's type must be String or Null
	 *
	 * @param textSecond it's type must be String or Null
	 */
	public static boolean equals(Object textFirst, Object textSecond) {
		boolean bool = false;
		if (null == textFirst || null == textSecond) {
			return bool;
		}
		String stro1;
		String stro2;
		try {
			stro1 = getString(textFirst);
			stro2 = getString(textSecond);
			if (stro1.equals(stro2)) {
				bool = true;
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}
		return bool;
	}

	/**
	 * 对输入字符串正序排列并返回
	 *
	 * @param list
	 * @return
	 * @author James Cheung Date:Jul 24, 2012
	 */
	public List<String> sortListAsc(List<String> list) {
		return list;
	}

	/**
	 * 对输入字符串反向排列
	 *
	 * @param list
	 * @return
	 * @author James Cheung Date:Jul 24, 2012
	 */
	public List<String> sortListDesc(List<String> list) {
		return list;
	}

	/*
	 * 返回一个字符串在另外一个字符串出现的起始位置(区分大小写)
	 *
	 * @param child it's type must be String or Null
	 *
	 * @param parent it's type must be String or Null
	 */
	public static int startPosition(Object child, Object parent) {
		int position = -1;
		if (isNullObjOrNotString(child) || isNullObjOrNotString(parent)) {
			return position;
		}
		return parent.toString().indexOf(child.toString());
	}

	/*
	 * 返回字符串中的字符个数
	 *
	 * @param text it's type must be String
	 */
	public static int getLength(Object text) {
		if (isNullObjOrNotString(text)) {
			return 0;
		} else {
			return text.toString().length();
		}
	}

	/*
	 * 将一个文本字符串的所有字母转换成为小写形式
	 *
	 * @param text it's type must be String
	 */
	public static String toLower(Object text) {
		if (isNullObjOrNotString(text)) {
			return null;
		} else {
			return text.toString().toLowerCase();
		}
	}

	public static boolean isNumber(Object obj) {
		if (obj == null || !(obj instanceof Number)) {
			return false;
		}
		return true;
	}

	/*
	 * 从文本字符串中指定的起始位置返回指定长度的字符
	 *
	 * @param text it's type must be String
	 *
	 * @param start it's type must be Ingteger
	 *
	 * @param size it's type must be Ingteger
	 */
	public static String getSubStr(Object text, Object start, Object size) {
		String returnStr = null;
		if (isNullObjOrNotString(text) || !(isNumber(start)) || !(isNumber(size))) {
			return returnStr;
		}
		int startIndex = Integer.valueOf(start.toString()) < 0 ? 0 : Integer.valueOf(start.toString());
		int sizeLen = Integer.valueOf(size.toString()) < 1 ? 0 : Integer.valueOf(size.toString());
		String str1 = text.toString();
		int length = str1.length();
		if (startIndex > str1.length() - 1) {
			return returnStr;
		}
		if ((startIndex + sizeLen) > length) {
			returnStr = str1.substring(startIndex, length);
		} else {
			returnStr = str1.substring(startIndex, (startIndex + sizeLen));
		}
		return returnStr;
	}

	public static String replaceAll(String str, String regex, String newStr) {
		if (isEmpty(str))
			return str;
		return str.replaceAll(regex, newStr);
	}

	/*
	 * 将一个字符串中的部份字符用另一个字符串替换
	 */

	/**
	 * <p>
	 * Replaces a String with another String inside a larger String, for the
	 * first <code>max</code> values of the search String.
	 * </p>
	 * <p>
	 * A <code>null</code> reference passed to this method is a no-op.
	 * </p>
	 * <p/>
	 * 
	 * <pre>
	 * StringFunctions.replace(null, *, *, *)         = null
	 * StringFunctions.replace("", *, *, *)           = ""
	 * StringFunctions.replace("any", null, *, *)     = "any"
	 * StringFunctions.replace("any", *, null, *)     = "any"
	 * StringFunctions.replace("any", "", *, *)       = "any"
	 * StringFunctions.replace("any", *, *, 0)        = "any"
	 * StringFunctions.replace("abaa", "a", null, -1) = "abaa"
	 * StringFunctions.replace("abaa", "a", "", -1)   = "b"
	 * StringFunctions.replace("abaa", "a", "z", 0)   = "abaa"
	 * StringFunctions.replace("abaa", "a", "z", 1)   = "zbaa"
	 * StringFunctions.replace("abaa", "a", "z", 2)   = "zbza"
	 * StringFunctions.replace("abaa", "a", "z", -1)  = "zbzz"
	 * </pre>
	 *
	 * @param text
	 *            text to search and replace in, may be null
	 * @param search
	 *            the String to search for, may be null
	 * @param replace
	 *            the String to replace it with, may be null
	 * @param max
	 *            maximum number of values to replace, or <code>-1</code> if no
	 *            maximum
	 * @return the text with any replacements processed, <code>null</code> if
	 *         null String input
	 */
	public static String replaceChar(Object text, Object search, Object replace, Object max) {
		String textStr = null;

		if (isNullObjOrNotString(text) || null == search || null == replace || null == max) {
			return textStr;
		}
		String searchString = (String) search;
		String replacement = (String) replace;
		int maxValue = Integer.valueOf(max.toString());
		textStr = text.toString();
		int start = 0;
		int end = textStr.indexOf(searchString, start);
		if (end == INDEX_NOT_FOUND) {
			return textStr;
		}
		int replLength = searchString.length();
		int increase = replacement.length() - replLength;
		increase = (increase < 0 ? 0 : increase);
		increase *= (maxValue < 0 ? 16 : (maxValue > 64 ? 64 : maxValue));
		StringBuilder buf = new StringBuilder(textStr.length() + increase);
		while (end != INDEX_NOT_FOUND) {
			buf.append(textStr.substring(start, end)).append(replacement);
			start = end + replLength;
			if (--maxValue == 0) {
				break;
			}
			end = textStr.indexOf(searchString, start);
		}
		buf.append(textStr.substring(start));
		return buf.toString();
	}

	/**
	 * <p>
	 * Replaces all occurrences of Strings within another String.
	 * </p>
	 */

	public static String splitFirst(String text, String regex) {
		String[] tempString = text.toString().split(regex.toString());
		if (tempString.length > 0) {
			return tempString[0];
		}
		return text.toString();
	}

	public static String getSameItem(String text1, String text2) {
		String[] items1 = text1.split(",");
		String[] items2 = text2.split(",");
		List<String> list1 = new ArrayList<String>();
		List<String> list2 = new ArrayList<String>();

		for (String el : items1) {
			list1.add(el);
		}
		for (String el : items2) {
			list2.add(el);
		}
		list1.retainAll(list2);
		String text = listToString(list1, ',');
		return text;
	}

	public static String listToString(List list, char separator) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < list.size(); i++) {
			sb.append(list.get(i));
			if (i < list.size() - 1) {
				sb.append(separator);
			}
		}
		return sb.toString();
	}

	/*
	 * 将字符串中的部分字符串以新字符替换旧字符
	 *
	 * @param str it's type must be String
	 *
	 * @param search it's type must be String
	 *
	 * @param replace it's type must be String
	 */
	public static String replace(Object text, Object search, Object replace) {
		if (isNullObjOrNotString(text) || isNullObjOrNotString(search) || isNullObjOrNotString(replace)) {
			return null;
		}
		String textStr = text.toString();
		String result = textStr.replaceAll((String) search, (String) replace);
		return result;
	}

	/*
	 * 根据指定次数重复文本。可用 REPT 在一个单元格中重复填写一个字符串
	 *
	 * @param text it's type must be String
	 *
	 * @param search it's type must be String
	 *
	 * @param replace it's type must be String
	 */
	public static String addRepeatedText(Object text, Object addStr, Object times) {
		String textStr = null;
		if (isNullObjOrNotString(text) || isNullObjOrNotString(addStr) || !isNumber(times)) {
			return textStr;
		}
		textStr = text.toString();
		StringBuilder sb = new StringBuilder();
		sb.append(textStr);
		if (null == addStr || Integer.valueOf(times.toString()) <= 0) {
			textStr = sb.toString();
			return textStr;
		}
		for (int i = 0; i < Integer.valueOf(times.toString()); i++) {
			sb.append(addStr.toString());
		}
		textStr = sb.toString();
		return textStr;
	}

	/**
	 * 根据指定正则表达式获取匹配到的字符串
	 *
	 * @param regx
	 *            正则表达式配置
	 * @return 返回与指定字符串匹配的字符串,如果没有匹配则返回空
	 */
	public static String getMatchString(String line, String regx) {
		String result = "";
		Pattern pattern = getPattern(regx);
		Matcher matcher = pattern.matcher(line);
		if (matcher.find()) {
			result = matcher.group();
			if (result.equalsIgnoreCase("NULL")) {
				result = "";
			}
			return result;
		}
		return result;
	}

	/*
	 * 从一个文本字符串的最后一个字符开始返回指定个数的字符
	 *
	 * @param str it's type must be String
	 *
	 * @param count it's type must be Integer
	 */
	public static String subStringLast(Object text, Object count) {
		String textStr = null;
		if (isNullObjOrNotString(text) || !isNumber(count)) {
			return textStr;
		}
		String str = text.toString();
		int length = str.length();
		if (Integer.valueOf(count.toString()) < 1 || Integer.valueOf(count.toString()) > length) {
			return str;
		} else {
			return str.substring(length - Integer.valueOf(count.toString()), length);
		}
	}

	/*
	 * 删除字符两头多余空格,但会保留词与词之间的空格
	 * 
	 * @param text it's type must be String
	 */

	public static String trim(Object text) {
		if (isNullObjOrNotString(text)) {
			return null;
		}
		return text.toString().trim();
	}

	public static boolean isMatch(String line, String regex) {
		boolean result = false;
		if (StringUtil.isEmpty(regex) || StringUtil.isEmpty(line))
			result = false;
		else {
			Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
			Matcher matcher = pattern.matcher(line);
			result = matcher.find();
		}
		// if (!result)
		// logger.error("【" + regex + "】" + "【" + result + "】 \n" + line);
		return result;
	}

	/*
	 * 将一个文本字符串的所有字母转换成为大写形式
	 *
	 * @param text it's type must be String
	 */
	public static String upper(Object text) {
		if (isNullObjOrNotString(text)) {
			return null;
		}
		return text.toString().toUpperCase();
	}

	public static int strLen(Object text) {
		return text.toString().length();
	}

	private static Pattern getPattern(String regex) {
		if (cachedPattern == null) {
			cachedPattern = new FixSizeMap<String, Pattern>();
			cachedPattern.setMaxSize(1000);
		}
		Pattern pattern = cachedPattern.get(regex);
		if (pattern == null) {
			pattern = Pattern.compile(regex, Pattern.MULTILINE);
			cachedPattern.put(regex, pattern);
		}
		return pattern;
	}

	/**
	 * @Function : 根据传递字符串,和重复出现的字符.获得它在第N次出现的位置;
	 * @param strParam
	 *            要判断的字符串
	 * @param iIn
	 *            指定出现的次数
	 * @param strChar
	 *            指定的字符
	 */
	public static int getCharPosition(String strParam, int iIn, String strChar) {
		// 这里是获取"/"符号的位置
		Matcher slashMatcher = Pattern.compile(strChar).matcher(strParam);
		int mIdx = 0;
		while (slashMatcher.find()) {
			mIdx++;
			// 当strChar符号第N次出现的位置
			if (mIdx == iIn) {
				break;
			}
		}

		int iPos = slashMatcher.start();
		return iPos;
	}

	/**
	 * @Function : 得到传入位数数字
	 * @param strNum
	 *            要转换的数值
	 * @param len
	 *            保留的位数
	 */
	public static String getFormatNumber(float strNum, int len) {
		String ret = "";
		String format = "#.";
		for (int i = 0; i < len; i++) {
			format += "0";
		}
		// 负数处理
		boolean minusFlag = false;
		if (strNum < 0) {
			minusFlag = true;
			strNum = Math.abs(strNum);
		}
		DecimalFormat df = new DecimalFormat(format);
		ret = df.format(strNum);
		if (strNum == 0) {
			return "0";
		}
		if (strNum < 1) {
			ret = "0" + ret;
		}
		String preStr = ret;
		String point = "";
		if (ret.indexOf(".") != -1) {
			String[] arr = ret.split("\\.");
			preStr = arr[0];
			point = arr[1];
			int pl = point.length() - 1;
			for (int i = pl; i >= 0; i--) {
				char p = point.charAt(i);
				if (p == '0') {
					point = point.substring(0, i);
				} else {
					break;
				}
			}
		}
		if ("".equals(point)) {
			ret = preStr;
		} else {
			ret = preStr + "." + point;
		}
		if (minusFlag) {
			ret = "-" + ret;
		}
		return ret;
	}
	
	
	public static String getFormatNumber(double strNum, int len) {
		String ret = "";
		String format = "#.";
		for (int i = 0; i < len; i++) {
			format += "0";
		}
		// 负数处理
		boolean minusFlag = false;
		if (strNum < 0) {
			minusFlag = true;
			strNum = Math.abs(strNum);
		}
		DecimalFormat df = new DecimalFormat(format);
		ret = df.format(strNum);
		if (strNum == 0) {
			return "0";
		}
		if (strNum < 1) {
			ret = "0" + ret;
		}
		String preStr = ret;
		String point = "";
		if (ret.indexOf(".") != -1) {
			String[] arr = ret.split("\\.");
			preStr = arr[0];
			point = arr[1];
			int pl = point.length() - 1;
			for (int i = pl; i >= 0; i--) {
				char p = point.charAt(i);
				if (p == '0') {
					point = point.substring(0, i);
				} else {
					break;
				}
			}
		}
		if ("".equals(point)) {
			ret = preStr;
		} else {
			ret = preStr + "." + point;
		}
		if (minusFlag) {
			ret = "-" + ret;
		}
		return ret;
	}
	
	

	public static void main(String[] args) {
		int str = StringUtil.getCRC32INTID("123456");
		boolean bool = StringUtil.isMatch("aabb|", "\\|");
		System.out.println(bool);

		String str2 = "3-10662-1-73";
		int iIn = StringUtil.getCharPosition(str2, 2, "-");
		str2 = str2.substring(iIn + 1, str2.length());

		System.out.println(str2);

		String str1 = StringUtil.getFormatNumber(-334.300f, 2);
		System.out.println(str1);

	}
}

  

转载于:https://www.cnblogs.com/tanada/p/11475169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值