package cn.jeesoft.core.utils; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.text.NumberFormat; import java.util.Random; /** * 字符串处理工具类 * @author king */ public class StringUtils extends org.apache.commons.lang.StringUtils { /** * 判断对象是否为空 * @param val * @return boolean */ public static boolean isEmpty(Object val){ if(val == null) { return true; } else { return isEmpty(String.valueOf(val)); } } public static boolean isEmpty(String str) { return !isNotEmpty(str); } public static boolean isNotEmpty(String str) { if(str == null || str.isEmpty() || "null".equals(str) || "NULL".equals(str)) { return false; } else { return org.apache.commons.lang.StringUtils.isNotEmpty(str); } } public static boolean isEmpty(String... str) { if (str == null || str.length == 0) { return true; } for (String item : str) { if (isNotEmpty(item)) { return false; } } return true; } /** * 判断是否手机号 * @param str * @return */ public static boolean isPhone(String str) { if (isNotEmpty(str) && isNumeric(str)) { if (str.length() == 11) { return true; } } return false; } public static String trim(String str) { return (str==null ? null : org.apache.commons.lang.StringUtils.trim(str)); } public static long toLong(Object num, long defValue) { if (num != null) { String value = String.valueOf(num); try { return Long.parseLong(value); } catch (Exception e) { } } return defValue; } public static int toInt(Object num, int defValue) { if (num != null) { String value = String.valueOf(num); try { return Integer.parseInt(value); } catch (Exception e) { } } return defValue; } public static boolean toBoolean(Object val, boolean defValue) { if (val != null) { String value = String.valueOf(val); try { return Boolean.valueOf(value) || toInt(val, 0)==1; } catch (Exception e) { } } return defValue; } public static String toCharset(String str, Charset charset, Charset toCharset) { if (str == null) { return null; } if (charset == toCharset) { return str; } return new String(str.getBytes(charset), toCharset); } public static String toCharset(String str, String charset, String toCharset) { if (str == null) { return null; } if (charset == toCharset) { return str; } try { return new String(str.getBytes(charset), toCharset); } catch (UnsupportedEncodingException e) { return str; } } /** * 自动匹配原编码,转换为目标编码 * @param str * @param toCharset * @return */ public static String toCharset(String str, String toCharset) { if (StringUtils.isEmpty(str)) { return null; } String encode = StringUtils.getEncoding(str); if (!StringUtils.isEmpty(encode)) { str = StringUtils.toCharset(str, encode, toCharset); } return str; } public static String getEncoding(String str) { if (isEmpty(str)) { return null; } String encode; encode = "ISO-8859-1"; if (isEncoding(str, encode)) { return encode; } encode = "UTF-8"; if (isEncoding(str, encode)) { return encode; } encode = "GB2312"; if (isEncoding(str, encode)) { return encode; } encode = "GBK"; if (isEncoding(str, encode)) { return encode; } return null; } /** * 判断是否指定编码 * @param str * @param encode * @return */ public static boolean isEncoding(String str, String encode) { try { if (str.equals(new String(str.getBytes(encode), encode))) { return true; } } catch (Exception e) { } return false; } /** * 转化数值的进制单位 * @param value 要转化的数值 * @param source 原始进制(2~36之间的任意进制) * @param target 目标进制(2~36之间的任意进制) * @return 转化后的数值 */ public static String coverNumberUnit(String value, int source, int target) { if (isEmpty(value)) { return null; } if (source < Character.MIN_RADIX || source > Character.MAX_RADIX) { throw new IllegalArgumentException("'source' must be between " +Character.MIN_RADIX+" and "+Character.MAX_RADIX+"."); } if (target < Character.MIN_RADIX || target > Character.MAX_RADIX) { throw new IllegalArgumentException("'target' must be between " +Character.MIN_RADIX+" and "+Character.MAX_RADIX+"."); } if (source == target) { return value; } long tmp = coverNumberToDecimal(value, source); return Long.toString(tmp, target); } /** * 转化数值的进制单位(转化为十进制) * @param value 要转化的数值 * @param radix 原始进制(2~36之间的任意进制) * @return 十进制的数值 */ public static long coverNumberToDecimal(String value, int radix) { return Long.parseLong(value, radix); } /** * 是否指定的小数位数 * @param number 要判断的数值 * @return true:是,false:否 */ public static boolean isFixDigit(float number) { double numberD = Double.parseDouble(String.valueOf(number)); return isFixDigit(numberD); } /** * 是否指定的小数位数 * @param number 要判断的数值 * @return true:是,false:否 */ public static boolean isFixDigit(double number) { //设置小数点后面的位数 NumberFormat nFormat = NumberFormat.getNumberInstance(); nFormat.setMaximumFractionDigits(2); return nFormat.format(number).equals(String.valueOf(number)); } /** * 生成随机数字 * @param num 数字个数 * @return */ public static String getRandomNum(int len) { Random random = new Random(); StringBuffer strNum = new StringBuffer(); for (int i=0; i<len; i++) { int num = random.nextInt(10); strNum.append(num); } return strNum.toString(); } private static final String _BaseCode = "abcdefghijklmnopqrstuvwxyz0123456789"; /** * 生成随机字符串 * @param num 字符串个数 * @return */ public static String getRandomStr(int len) { Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < len; i++) { int number = random.nextInt(_BaseCode.length()); sb.append(_BaseCode.charAt(number)); } return sb.toString(); } }