import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java.io.UnsupportedEncodingException;import java.lang.reflect.Method;import java.net.URLDecoder;import java.net.URLEncoder;import java.util.*;import java.util.concurrent.ConcurrentHashMap;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** Created by Nemo on 2017/11/2.*/public class StringUtils {/*** 编译后的正则表达式缓存*/private static final Map<String, Pattern> PATTERN_CACHE = new ConcurrentHashMap<String, Pattern>();public static final String createUUID() {return MD5.encode(UUID.randomUUID().toString());}/*** 编译一个正则表达式,并且进行缓存,如果换成已存在则使用缓存** @param regex 表达式* @return 编译后的Pattern*/public static final Pattern compileRegex(String regex) {Pattern pattern = PATTERN_CACHE.get(regex);if (pattern == null) {pattern = Pattern.compile(regex);PATTERN_CACHE.put(regex, pattern);}return pattern;}/*** 将字符串的第一位转为小写** @param str 需要转换的字符串* @return 转换后的字符串*/public static String toLowerCaseFirstOne(String str) {if (Character.isLowerCase(str.charAt(0)))return str;else {char[] chars = str.toCharArray();chars[0] = Character.toLowerCase(chars[0]);return new String(chars);}}/*** 将字符串的第一位转为大写** @param str 需要转换的字符串* @return 转换后的字符串*/public static String toUpperCaseFirstOne(String str) {if (Character.isUpperCase(str.charAt(0)))return str;else {char[] chars = str.toCharArray();chars[0] = Character.toUpperCase(chars[0]);return new String(chars);}}/*** 下划线命名转为驼峰命名** @param str 下划线命名格式* @return 驼峰命名格式*/public static final String underScoreCase2CamelCase(String str) {if (!str.contains("_")) return str;StringBuilder sb = new StringBuilder();char[] chars = str.toCharArray();boolean hitUnderScore = false;sb.append(chars[0]);for (int i = 1; i < chars.length; i++) {char c = chars[i];if (c == '_') {hitUnderScore = true;} else {if (hitUnderScore) {sb.append(Character.toUpperCase(c));hitUnderScore = false;} else {sb.append(c);}}}return sb.toString();}/*** 驼峰命名法转为下划线命名** @param str 驼峰命名格式* @return 下划线命名格式*/public static final String camelCase2UnderScoreCase(String str) {StringBuilder sb = new StringBuilder();char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {char c = chars[i];if (Character.isUpperCase(c)) {sb.append("_").append(Character.toLowerCase(c));} else {sb.append(c);}}return sb.toString();}/*** 将异常栈信息转为字符串** @param e 字符串* @return 异常栈*/public static String throwable2String(Throwable e) {StringWriter writer = new StringWriter();e.printStackTrace(new PrintWriter(writer));return writer.toString();}/*** 字符串连接,将参数列表拼接为一个字符串** @param more 追加* @return 返回拼接后的字符串*/public static String concat(Object... more) {return concatSpiltWith("", more);}public static String concatSpiltWith(String split, Object... more) {StringBuilder buf = new StringBuilder();for (int i = 0; i < more.length; i++) {if (i != 0) buf.append(split);buf.append(more[i]);}return buf.toString();}/*** 将字符串转移为ASCII码** @param str 字符串* @return 字符串ASCII码*/public static String toASCII(String str) {StringBuffer strBuf = new StringBuffer();byte[] bGBK = str.getBytes();for (int i = 0; i < bGBK.length; i++) {strBuf.append(Integer.toHexString(bGBK[i] & 0xff));}return strBuf.toString();}public static String toUnicode(String str) {StringBuffer strBuf = new StringBuffer();char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {strBuf.append("\\u").append(Integer.toHexString(chars[i]));}return strBuf.toString();}public static String toUnicodeString(char[] chars) {StringBuffer strBuf = new StringBuffer();for (int i = 0; i < chars.length; i++) {strBuf.append("\\u").append(Integer.toHexString(chars[i]));}return strBuf.toString();}/*** 是否包含中文字符** @param str 要判断的字符串* @return 是否包含中文字符*/public static boolean containsChineseChar(String str) {Matcher m = compileRegex("[\u4e00-\u9fa5]+").matcher(str);return m.matches();}/*** 对象是否为无效值** @param obj 要判断的对象* @return 是否为有效值(不为null 和 "" 字符串)*/public static boolean isNullOrEmpty(Object obj) {return obj == null || "".equals(obj.toString());}/*** 参数是否是有效数字 (整数或者小数)** @param obj 参数(对象将被调用string()转为字符串类型)* @return 是否是数字*/public static boolean isNumber(Object obj) {if (obj instanceof Number) return true;return isInt(obj) || isDouble(obj);}public static String matcherFirst(String patternStr, String text) {Pattern pattern = compileRegex(patternStr);Matcher matcher = pattern.matcher(text);String group = null;if (matcher.find()) {group = matcher.group();}return group;}/*** 参数是否是有效整数** @param obj 参数(对象将被调用string()转为字符串类型)* @return 是否是整数*/public static boolean isInt(Object obj) {if (isNullOrEmpty(obj))return false;if (obj instanceof Integer)return true;return obj.toString().matches("[-+]?\\d+");}/*** 字符串参数是否是double** @param obj 参数(对象将被调用string()转为字符串类型)* @return 是否是double*/public static boolean isDouble(Object obj) {if (isNullOrEmpty(obj))return false;if (obj instanceof Double || obj instanceof Float)return true;return compileRegex("[-+]?\\d+\\.\\d+").matcher(obj.toString()).matches();}/*** 判断一个对象是否为boolean类型,包括字符串中的true和false** @param obj 要判断的对象* @return 是否是一个boolean类型*/public static boolean isBoolean(Object obj) {if (obj instanceof Boolean) return true;String strVal = String.valueOf(obj);return "true".equalsIgnoreCase(strVal) || "false".equalsIgnoreCase(strVal);}/*** 对象是否为true** @param obj* @return*/public static boolean isTrue(Object obj) {return "true".equals(String.valueOf(obj));}/*** 判断一个数组里是否包含指定对象** @param arr 对象数组* @param obj 要判断的对象* @return 是否包含*/public static boolean contains(Object arr[], Object... obj) {if (arr == null || obj == null || arr.length == 0) return false;return Arrays.asList(arr).containsAll(Arrays.asList(obj));}/*** 将对象转为int值,如果对象无法进行转换,则使用默认值** @param object 要转换的对象* @param defaultValue 默认值* @return 转换后的值*/public static int toInt(Object object, int defaultValue) {if (object instanceof Number)return ((Number) object).intValue();if (isInt(object)) {return Integer.parseInt(object.toString());}if (isDouble(object)) {return (int) Double.parseDouble(object.toString());}return defaultValue;}/*** 将对象转为int值,如果对象不能转为,将返回0** @param object 要转换的对象* @return 转换后的值*/public static int toInt(Object object) {return toInt(object, 0);}/*** 将对象转为long类型,如果对象无法转换,将返回默认值** @param object 要转换的对象* @param defaultValue 默认值* @return 转换后的值*/public static long toLong(Object object, long defaultValue) {if (object instanceof Number)return ((Number) object).longValue();if (isInt(object)) {return Long.parseLong(object.toString());}if (isDouble(object)) {return (long) Double.parseDouble(object.toString());}return defaultValue;}/*** 将对象转为 long值,如果无法转换,则转为0** @param object 要转换的对象* @return 转换后的值*/public static long toLong(Object object) {return toLong(object, 0);}/*** 将对象转为Double,如果对象无法转换,将使用默认值** @param object 要转换的对象* @param defaultValue 默认值* @return 转换后的值*/public static double toDouble(Object object, double defaultValue) {if (object instanceof Number)return ((Number) object).doubleValue();if (isNumber(object)) {return Double.parseDouble(object.toString());}if (null == object) return defaultValue;return 0;}/*** 将对象转为Double,如果对象无法转换,将使用默认值0** @param object 要转换的对象* @return 转换后的值*/public static double toDouble(Object object) {return toDouble(object, 0);}/*** 分隔字符串,根据正则表达式分隔字符串,只分隔首个,剩下的的不进行分隔,如: 1,2,3,4 将分隔为 ['1','2,3,4']** @param str 要分隔的字符串* @param regex 分隔表达式* @return 分隔后的数组*/public static String[] splitFirst(String str, String regex) {return str.split(regex, 2);}/*** 将对象转为字符串,如果对象为null,则返回null,而不是"null"** @param object 要转换的对象* @return 转换后的对象*/public static String toString(Object object) {return toString(object, null);}/*** 将对象转为字符串,如果对象为null,则使用默认值** @param object 要转换的对象* @param defaultValue 默认值* @return 转换后的字符串*/public static String toString(Object object, String defaultValue) {if (object == null) return defaultValue;return String.valueOf(object);}/*** 将对象转为String后进行分割,如果为对象为空或者空字符,则返回null** @param object 要分隔的对象* @param regex 分隔规则* @return 分隔后的对象*/public static final String[] toStringAndSplit(Object object, String regex) {if (isNullOrEmpty(object)) return null;return String.valueOf(object).split(regex);}private static boolean isChinese(char c) {
上一个文章:Linux中more和less命令用法【转载】