diff --git a/src/main/java/com/smallchill/core/toolbox/kit/AESKit.java b/src/main/java/com/smallchill/core/toolbox/kit/AESKit.java index 9ba6e72d..f85934f9 100644 --- a/src/main/java/com/smallchill/core/toolbox/kit/AESKit.java +++ b/src/main/java/com/smallchill/core/toolbox/kit/AESKit.java @@ -19,14 +19,19 @@ public class AESKit { /** * 加密 - * @param content 需要加密的内容 - * @param password 加密密码 + * + * @param content + * 需要加密的内容 + * @param password + * 加密密码 * @return */ private static byte[] encryptByte(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); - kgen.init(128, new SecureRandom(password.getBytes())); + SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); + secureRandom.setSeed(password.getBytes()); + kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); @@ -53,14 +58,19 @@ public class AESKit { /** * 解密 - * @param content 待解密内容 - * @param password 解密密钥 + * + * @param content + * 待解密内容 + * @param password + * 解密密钥 * @return */ private static byte[] decryptByte(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); - kgen.init(128, new SecureRandom(password.getBytes())); + SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); + secureRandom.setSeed(password.getBytes()); + kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); @@ -84,6 +94,7 @@ public class AESKit { /** * AES加密 + * * @param str * @return */ @@ -93,6 +104,7 @@ public class AESKit { /** * AES解密 + * * @param str * @return */ diff --git a/src/main/java/com/smallchill/core/toolbox/support/Convert.java b/src/main/java/com/smallchill/core/toolbox/support/Convert.java index 654054fb..a3403aec 100644 --- a/src/main/java/com/smallchill/core/toolbox/support/Convert.java +++ b/src/main/java/com/smallchill/core/toolbox/support/Convert.java @@ -1,1062 +1,1062 @@ -package com.smallchill.core.toolbox.support; - -import java.io.UnsupportedEncodingException; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.nio.charset.Charset; -import java.text.NumberFormat; -import java.util.Date; -import java.util.Set; - -import com.smallchill.core.exception.ToolBoxException; -import com.smallchill.core.toolbox.kit.CollectionKit; -import com.smallchill.core.toolbox.kit.DateTimeKit; -import com.smallchill.core.toolbox.kit.HexKit; -import com.smallchill.core.toolbox.kit.StrKit; - -/** - * 类型转换器 - * - * @author xiaoleilu - * - */ -public class Convert { - - - private Convert() { - // 静态类不可实例化 - } - - /** - * 强制转换类型 - * - * @param clazz 被转换成的类型 - * @param value 需要转换的对象 - * @return 转换后的对象 - */ - public static Object parse(Class clazz, Object value) { - try { - if (clazz.isAssignableFrom(String.class)) { - // ----2016-12-19---zhuangqian----防止beetlsql对空字符串不检测导致无法入库的问题---- - if (StrKit.isBlank(String.valueOf(value))) - return " "; - else - return String.valueOf(value); - } - return clazz.cast(value); - } catch (ClassCastException e) { - String valueStr = String.valueOf(value); - - Object result = parseBasic(clazz, valueStr); - if (result != null) { - return result; - } - - if (Date.class.isAssignableFrom(clazz)) { - // 判断标准日期 - // ----2016-11-24---zhuangqian----需要加toDate(),不然beetlsql转换date类型的时候会报错---- - return DateTimeKit.parse(valueStr).toDate(); - } else if (clazz == BigInteger.class) { - // 数学计算数字 - return new BigInteger(valueStr); - } else if (clazz == BigDecimal.class) { - // 数学计算数字 - return new BigDecimal(valueStr); - } else if (clazz == byte[].class) { - // 流,由于有字符编码问题,在此使用系统默认 - return valueStr.getBytes(); - } - // 未找到可转换的类型,返回原值 - return (StrKit.isBlank(valueStr)) ? null : value; - } - } - - /** - * 转换基本类型
- * 将字符串转换为原始类型或包装类型 - * - * @param clazz 转换到的类,可以是原始类型类,也可以是包装类型类 - * @param valueStr 被转换的字符串 - * @return 转换后的对象,如果非基本类型,返回null - */ - public static Object parseBasic(Class clazz, String valueStr) { - if (null == clazz || null == valueStr) { - return null; - } - - if (StrKit.isBlank(valueStr)) return null; - - BasicType basicType = null; - try { - basicType = BasicType.valueOf(clazz.getSimpleName().toUpperCase()); - } catch (Exception e) { - // 非基本类型数据 - return null; - } - - switch (basicType) { - case BYTE: - if (clazz == byte.class) { - return Byte.parseByte(valueStr); - } - return Byte.valueOf(valueStr); - case SHORT: - if (clazz == short.class) { - return Short.parseShort(valueStr); - } - return Short.valueOf(valueStr); - case INT: - return Integer.parseInt(valueStr); - case INTEGER: - return Integer.valueOf(valueStr); - case LONG: - if (clazz == long.class) { - return new BigDecimal(valueStr).longValue(); - } - return Long.valueOf(valueStr); - case DOUBLE: - if (clazz == double.class) { - return new BigDecimal(valueStr).doubleValue(); - } - case FLOAT: - if (clazz == float.class) { - return Float.parseFloat(valueStr); - } - return Float.valueOf(valueStr); - case BOOLEAN: - if (clazz == boolean.class) { - return Boolean.parseBoolean(valueStr); - } - return Boolean.valueOf(valueStr); - case CHAR: - return valueStr.charAt(0); - case CHARACTER: - return Character.valueOf(valueStr.charAt(0)); - default: - return null; - } - } - - /** - * 转换为字符串
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static String toStr(Object value, String defaultValue) { - if (null == value) { - return defaultValue; - } - if (value instanceof String) { - return (String) value; - } else if (CollectionKit.isArray(value)) { - return CollectionKit.toString(value); - } - return value.toString(); - } - - /** - * 转换为字符串
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static String toStr(Object value) { - return toStr(value, null); - } - - /** - * 转换为字符
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Character toChar(Object value, Character defaultValue) { - if (null == value) { - return defaultValue; - } - if (value instanceof Character) { - return (Character) value; - } - - final String valueStr = toStr(value, null); - return StrKit.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); - } - - /** - * 转换为字符
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Character toChar(Object value) { - return toChar(value, null); - } - - /** - * 转换为byte
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Byte toByte(Object value, Byte defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Byte) { - return (Byte) value; - } - if (value instanceof Number) { - return ((Number) value).byteValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return Byte.parseByte(valueStr); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为byte
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Byte toByte(Object value) { - return toByte(value, null); - } - - /** - * 转换为Short
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Short toShort(Object value, Short defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Short) { - return (Short) value; - } - if (value instanceof Number) { - return ((Number) value).shortValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return Short.parseShort(valueStr.trim()); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为Short
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Short toShort(Object value) { - return toShort(value, null); - } - - /** - * 转换为Number
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Number toNumber(Object value, Number defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Number) { - return (Number) value; - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return NumberFormat.getInstance().parse(valueStr); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为Number
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Number toNumber(Object value) { - return toNumber(value, null); - } - - /** - * 转换为int
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Integer toInt(Object value, Integer defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Integer) { - return (Integer) value; - } - if (value instanceof Number) { - return ((Number) value).intValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return Integer.parseInt(valueStr.trim()); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为int
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Integer toInt(Object value) { - return toInt(value, null); - } - - /** - * 转换为Integer数组
- * - * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null - * @param values 被转换的值 - * @return 结果 - */ - public static Integer[] toIntArray(boolean isIgnoreConvertError, Object... values) { - if (CollectionKit.isEmpty(values)) { - return new Integer[] {}; - } - final Integer[] ints = new Integer[values.length]; - for (int i = 0; i < values.length; i++) { - final Integer v = toInt(values[i], null); - if (null == v && isIgnoreConvertError == false) { - throw new ToolBoxException(StrKit.format("Convert [{}] to Integer error!", values[i])); - } - ints[i] = v; - } - return ints; - } - - - /** - * 转换为Integer数组
- * - * @param split 被转换的值 - * @return 结果 - */ - public static Integer[] toIntArray(String str) { - return toIntArray(",", str); - } - - /** - * 转换为Integer数组
- * - * @param split 分隔符 - * @param split 被转换的值 - * @return 结果 - */ - public static Integer[] toIntArray(String split, String str) { - if (StrKit.isEmpty(str)) { - return new Integer[] {}; - } - String[] arr = str.split(split); - final Integer[] ints = new Integer[arr.length]; - for (int i = 0; i < arr.length; i++) { - final Integer v = toInt(arr[i], 0); - ints[i] = v; - } - return ints; - } - - /** - * 转换为String数组
- * - * @param split 被转换的值 - * @return 结果 - */ - public static String[] toStrArray(String str) { - return toStrArray("", str); - } - - /** - * 转换为String数组
- * - * @param split 分隔符 - * @param split 被转换的值 - * @return 结果 - */ - public static String[] toStrArray(String split, String str) { - return str.split(split); - } - - /** - * 转换为long
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Long toLong(Object value, Long defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Long) { - return (Long) value; - } - if (value instanceof Number) { - return ((Number) value).longValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - // 支持科学计数法 - return new BigDecimal(valueStr.trim()).longValue(); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为long
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Long toLong(Object value) { - return toLong(value, null); - } - - /** - * 转换为Long数组
- * - * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null - * @param values 被转换的值 - * @return 结果 - */ - public static Long[] toLongArray(boolean isIgnoreConvertError, Object... values) { - if (CollectionKit.isEmpty(values)) { - return new Long[] {}; - } - final Long[] longs = new Long[values.length]; - for (int i = 0; i < values.length; i++) { - final Long v = toLong(values[i], null); - if (null == v && isIgnoreConvertError == false) { - throw new ToolBoxException(StrKit.format("Convert [{}] to Long error!", values[i])); - } - longs[i] = v; - } - return longs; - } - - /** - * 转换为double
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Double toDouble(Object value, Double defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Double) { - return (Double) value; - } - if (value instanceof Number) { - return ((Number) value).doubleValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - // 支持科学计数法 - return new BigDecimal(valueStr.trim()).doubleValue(); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为double
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Double toDouble(Object value) { - return toDouble(value, null); - } - - /** - * 转换为Double数组
- * - * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null - * @param values 被转换的值 - * @return 结果 - */ - public static Double[] toDoubleArray(boolean isIgnoreConvertError, Object... values) { - if (CollectionKit.isEmpty(values)) { - return new Double[] {}; - } - final Double[] doubles = new Double[values.length]; - for (int i = 0; i < values.length; i++) { - final Double v = toDouble(values[i], null); - if (null == v && isIgnoreConvertError == false) { - throw new ToolBoxException(StrKit.format("Convert [{}] to Double error!", values[i])); - } - doubles[i] = v; - } - return doubles; - } - - /** - * 转换为Float
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Float toFloat(Object value, Float defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Float) { - return (Float) value; - } - if (value instanceof Number) { - return ((Number) value).floatValue(); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return Float.parseFloat(valueStr.trim()); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为Float
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Float toFloat(Object value) { - return toFloat(value, null); - } - - /** - * 转换为Float数组
- * - * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null - * @param values 被转换的值 - * @return 结果 - */ - public static Float[] toFloatArray(boolean isIgnoreConvertError, Object... values) { - if (CollectionKit.isEmpty(values)) { - return new Float[] {}; - } - final Float[] floats = new Float[values.length]; - for (int i = 0; i < values.length; i++) { - final Float v = toFloat(values[i], null); - if (null == v && isIgnoreConvertError == false) { - throw new ToolBoxException(StrKit.format("Convert [{}] to Float error!", values[i])); - } - floats[i] = v; - } - return floats; - } - - /** - * 转换为boolean
- * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static Boolean toBool(Object value, Boolean defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof Boolean) { - return (Boolean) value; - } - String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - valueStr = valueStr.trim().toLowerCase(); - switch (valueStr) { - case "true": - return true; - case "false": - return false; - case "yes": - return true; - case "ok": - return true; - case "no": - return false; - case "1": - return true; - case "0": - return false; - default: - return defaultValue; - } - } - - /** - * 转换为boolean
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static Boolean toBool(Object value) { - return toBool(value, null); - } - - /** - * 转换为Boolean数组
- * - * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null - * @param values 被转换的值 - * @return 结果 - */ - public static Boolean[] toBooleanArray(boolean isIgnoreConvertError, Object... values) { - if (CollectionKit.isEmpty(values)) { - return new Boolean[] {}; - } - final Boolean[] bools = new Boolean[values.length]; - for (int i = 0; i < values.length; i++) { - final Boolean v = toBool(values[i], null); - if (null == v && isIgnoreConvertError == false) { - throw new ToolBoxException(StrKit.format("Convert [{}] to Boolean error!", values[i])); - } - bools[i] = v; - } - return bools; - } - - /** - * 转换为Enum对象
- * 如果给定的值为空,或者转换失败,返回默认值
- * - * @param clazz Enum的Class - * @param value 值 - * @param defaultValue 默认值 - * @return Enum - */ - public static > E toEnum(Class clazz, Object value, E defaultValue) { - if (value == null) { - return defaultValue; - } - if (clazz.isAssignableFrom(value.getClass())) { - @SuppressWarnings("unchecked") - E myE = (E) value; - return myE; - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return Enum.valueOf(clazz, valueStr); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为Enum对象
- * 如果给定的值为空,或者转换失败,返回默认值null
- * - * @param clazz Enum的Class - * @param value 值 - * @return Enum - */ - public static > E toEnum(Class clazz, Object value) { - return toEnum(clazz, value, null); - } - - /** - * 转换为BigInteger
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static BigInteger toBigInteger(Object value, BigInteger defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof BigInteger) { - return (BigInteger) value; - } - if (value instanceof Long) { - return BigInteger.valueOf((Long) value); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return new BigInteger(valueStr); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为BigInteger
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static BigInteger toBigInteger(Object value) { - return toBigInteger(value, null); - } - - /** - * 转换为BigDecimal
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @param defaultValue 转换错误时的默认值 - * @return 结果 - */ - public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) { - if (value == null) { - return defaultValue; - } - if (value instanceof BigDecimal) { - return (BigDecimal) value; - } - if (value instanceof Long) { - return new BigDecimal((Long) value); - } - if (value instanceof Double) { - return new BigDecimal((Double) value); - } - if (value instanceof Integer) { - return new BigDecimal((Integer) value); - } - final String valueStr = toStr(value, null); - if (StrKit.isBlank(valueStr)) { - return defaultValue; - } - try { - return new BigDecimal(valueStr); - } catch (Exception e) { - return defaultValue; - } - } - - /** - * 转换为BigDecimal
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错 - * - * @param value 被转换的值 - * @return 结果 - */ - public static BigDecimal toBigDecimal(Object value) { - return toBigDecimal(value, null); - } - - // ----------------------------------------------------------------------- 全角半角转换 - /** - * 半角转全角 - * - * @param input String. - * @return 全角字符串. - */ - public static String toSBC(String input) { - return toSBC(input, null); - } - - /** - * 半角转全角 - * - * @param input String - * @param notConvertSet 不替换的字符集合 - * @return 全角字符串. - */ - public static String toSBC(String input, Set notConvertSet) { - char c[] = input.toCharArray(); - for (int i = 0; i < c.length; i++) { - if (null != notConvertSet && notConvertSet.contains(c[i])) { - // 跳过不替换的字符 - continue; - } - - if (c[i] == ' ') { - c[i] = '\u3000'; - } else if (c[i] < '\177') { - c[i] = (char) (c[i] + 65248); - - } - } - return new String(c); - } - - /** - * 全角转半角 - * - * @param input String. - * @return 半角字符串 - */ - public static String toDBC(String input) { - return toDBC(input, null); - } - - /** - * 替换全角为半角 - * - * @param text 文本 - * @param notConvertSet 不替换的字符集合 - * @return 替换后的字符 - */ - public static String toDBC(String text, Set notConvertSet) { - char c[] = text.toCharArray(); - for (int i = 0; i < c.length; i++) { - if (null != notConvertSet && notConvertSet.contains(c[i])) { - // 跳过不替换的字符 - continue; - } - - if (c[i] == '\u3000') { - c[i] = ' '; - } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { - c[i] = (char) (c[i] - 65248); - } - } - String returnString = new String(c); - - return returnString; - } - - // --------------------------------------------------------------------- hex - /** - * 字符串转换成十六进制字符串 - * - * @param str 待转换的ASCII字符串 - * @return 16进制字符串 - */ - public static String toHex(String str) { - return HexKit.encodeHexStr(str.getBytes()); - } - - /** - * byte数组转16进制串 - * - * @param bytes 被转换的byte数组 - * @return 转换后的值 - */ - public static String toHex(byte[] bytes) { - return HexKit.encodeHexStr(bytes); - } - - /** - * Hex字符串转换为Byte值 - * - * @param src Byte字符串,每个Byte之间没有分隔符 - * @return byte[] - */ - public static byte[] hexToBytes(String src) { - return HexKit.decodeHex(src.toCharArray()); - } - - /** - * 十六进制转换字符串 - * - * @param hexStr Byte字符串(Byte之间无分隔符 如:[616C6B]) - * @param charset 编码 {@link Charset} - * @return 对应的字符串 - */ - public static String hexStrToStr(String hexStr, Charset charset) { - return HexKit.decodeHexStr(hexStr, charset); - } - - /** - * String的字符串转换成unicode的String - * - * @param strText 全角字符串 - * @return String 每个unicode之间无分隔符 - * @throws Exception - */ - public static String strToUnicode(String strText) throws Exception { - char c; - StringBuilder str = new StringBuilder(); - int intAsc; - String strHex; - for (int i = 0; i < strText.length(); i++) { - c = strText.charAt(i); - intAsc = (int) c; - strHex = Integer.toHexString(intAsc); - if (intAsc > 128) - str.append("\\u" + strHex); - else // 低位在前面补00 - str.append("\\u00" + strHex); - } - return str.toString(); - } - - /** - * unicode的String转换成String的字符串 - * - * @param hex 16进制值字符串 (一个unicode为2byte) - * @return String 全角字符串 - */ - public static String unicodeToStr(String hex) { - int t = hex.length() / 6; - StringBuilder str = new StringBuilder(); - for (int i = 0; i < t; i++) { - String s = hex.substring(i * 6, (i + 1) * 6); - // 高位需要补上00再转 - String s1 = s.substring(2, 4) + "00"; - // 低位直接转 - String s2 = s.substring(4); - // 将16进制的string转为int - int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16); - // 将int转换为字符 - char[] chars = Character.toChars(n); - str.append(new String(chars)); - } - return str.toString(); - } - - /** - * 给定字符串转换字符编码
- * 如果参数为空,则返回原字符串,不报错。 - * - * @param str 被转码的字符串 - * @param sourceCharset 原字符集 - * @param destCharset 目标字符集 - * @return 转换后的字符串 - */ - public static String convertCharset(String str, String sourceCharset, String destCharset) { - if (StrKit.hasBlank(str, sourceCharset, destCharset)) { - return str; - } - - try { - return new String(str.getBytes(sourceCharset), destCharset); - } catch (UnsupportedEncodingException e) { - return str; - } - } - - /** - * 数字金额大写转换 先写个完整的然后将如零拾替换成零 - * - * @param n 数字 - * @return 中文大写数字 - */ - public static String digitUppercase(double n) { - String fraction[] = { "角", "分" }; - String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; - String unit[][] = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; - - String head = n < 0 ? "负" : ""; - n = Math.abs(n); - - String s = ""; - for (int i = 0; i < fraction.length; i++) { - s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); - } - if (s.length() < 1) { - s = "整"; - } - int integerPart = (int) Math.floor(n); - - for (int i = 0; i < unit[0].length && integerPart > 0; i++) { - String p = ""; - for (int j = 0; j < unit[1].length && n > 0; j++) { - p = digit[integerPart % 10] + unit[1][j] + p; - integerPart = integerPart / 10; - } - s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; - } - return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); - } - -} +package com.smallchill.core.toolbox.support; + +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Date; +import java.util.Set; + +import com.smallchill.core.exception.ToolBoxException; +import com.smallchill.core.toolbox.kit.CollectionKit; +import com.smallchill.core.toolbox.kit.DateTimeKit; +import com.smallchill.core.toolbox.kit.HexKit; +import com.smallchill.core.toolbox.kit.StrKit; + +/** + * 类型转换器 + * + * @author xiaoleilu + * + */ +public class Convert { + + + private Convert() { + // 静态类不可实例化 + } + + /** + * 强制转换类型 + * + * @param clazz 被转换成的类型 + * @param value 需要转换的对象 + * @return 转换后的对象 + */ + public static Object parse(Class clazz, Object value) { + try { + if (clazz.isAssignableFrom(String.class)) { + // ----2016-12-19---zhuangqian----防止beetlsql对空字符串不检测导致无法入库的问题---- + if (StrKit.isBlank(String.valueOf(value))) + return " "; + else + return String.valueOf(value); + } + return clazz.cast(value); + } catch (ClassCastException e) { + String valueStr = String.valueOf(value); + + Object result = parseBasic(clazz, valueStr); + if (result != null) { + return result; + } + + if (Date.class.isAssignableFrom(clazz)) { + // 判断标准日期 + // ----2016-11-24---zhuangqian----需要加toDate(),不然beetlsql转换date类型的时候会报错---- + return DateTimeKit.parse(valueStr).toDate(); + } else if (clazz == BigInteger.class) { + // 数学计算数字 + return new BigInteger(valueStr); + } else if (clazz == BigDecimal.class) { + // 数学计算数字 + return new BigDecimal(valueStr); + } else if (clazz == byte[].class) { + // 流,由于有字符编码问题,在此使用系统默认 + return valueStr.getBytes(); + } + // 未找到可转换的类型,返回原值 + return (StrKit.isBlank(valueStr)) ? null : value; + } + } + + /** + * 转换基本类型
+ * 将字符串转换为原始类型或包装类型 + * + * @param clazz 转换到的类,可以是原始类型类,也可以是包装类型类 + * @param valueStr 被转换的字符串 + * @return 转换后的对象,如果非基本类型,返回null + */ + public static Object parseBasic(Class clazz, String valueStr) { + if (null == clazz || null == valueStr) { + return null; + } + + if (StrKit.isBlank(valueStr)) return null; + + BasicType basicType = null; + try { + basicType = BasicType.valueOf(clazz.getSimpleName().toUpperCase()); + } catch (Exception e) { + // 非基本类型数据 + return null; + } + + switch (basicType) { + case BYTE: + if (clazz == byte.class) { + return Byte.parseByte(valueStr); + } + return Byte.valueOf(valueStr); + case SHORT: + if (clazz == short.class) { + return Short.parseShort(valueStr); + } + return Short.valueOf(valueStr); + case INT: + return Integer.parseInt(valueStr); + case INTEGER: + return Integer.valueOf(valueStr); + case LONG: + if (clazz == long.class) { + return new BigDecimal(valueStr).longValue(); + } + return Long.valueOf(valueStr); + case DOUBLE: + if (clazz == double.class) { + return new BigDecimal(valueStr).doubleValue(); + } + case FLOAT: + if (clazz == float.class) { + return Float.parseFloat(valueStr); + } + return Float.valueOf(valueStr); + case BOOLEAN: + if (clazz == boolean.class) { + return Boolean.parseBoolean(valueStr); + } + return Boolean.valueOf(valueStr); + case CHAR: + return valueStr.charAt(0); + case CHARACTER: + return Character.valueOf(valueStr.charAt(0)); + default: + return null; + } + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof String) { + return (String) value; + } else if (CollectionKit.isArray(value)) { + return CollectionKit.toString(value); + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof Character) { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StrKit.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Byte) { + return (Byte) value; + } + if (value instanceof Number) { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return Byte.parseByte(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Short) { + return (Short) value; + } + if (value instanceof Number) { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return Short.parseShort(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Number) { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return NumberFormat.getInstance().parse(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Integer) { + return (Integer) value; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return Integer.parseInt(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null + * @param values 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(boolean isIgnoreConvertError, Object... values) { + if (CollectionKit.isEmpty(values)) { + return new Integer[] {}; + } + final Integer[] ints = new Integer[values.length]; + for (int i = 0; i < values.length; i++) { + final Integer v = toInt(values[i], null); + if (null == v && isIgnoreConvertError == false) { + throw new ToolBoxException(StrKit.format("Convert [{}] to Integer error!", values[i])); + } + ints[i] = v; + } + return ints; + } + + + /** + * 转换为Integer数组
+ * + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) { + return toIntArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) { + if (StrKit.isEmpty(str)) { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为String数组
+ * + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Long) { + return (Long) value; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) { + return toLong(value, null); + } + + /** + * 转换为Long数组
+ * + * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null + * @param values 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(boolean isIgnoreConvertError, Object... values) { + if (CollectionKit.isEmpty(values)) { + return new Long[] {}; + } + final Long[] longs = new Long[values.length]; + for (int i = 0; i < values.length; i++) { + final Long v = toLong(values[i], null); + if (null == v && isIgnoreConvertError == false) { + throw new ToolBoxException(StrKit.format("Convert [{}] to Long error!", values[i])); + } + longs[i] = v; + } + return longs; + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Double) { + return (Double) value; + } + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) { + return toDouble(value, null); + } + + /** + * 转换为Double数组
+ * + * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null + * @param values 被转换的值 + * @return 结果 + */ + public static Double[] toDoubleArray(boolean isIgnoreConvertError, Object... values) { + if (CollectionKit.isEmpty(values)) { + return new Double[] {}; + } + final Double[] doubles = new Double[values.length]; + for (int i = 0; i < values.length; i++) { + final Double v = toDouble(values[i], null); + if (null == v && isIgnoreConvertError == false) { + throw new ToolBoxException(StrKit.format("Convert [{}] to Double error!", values[i])); + } + doubles[i] = v; + } + return doubles; + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Float) { + return (Float) value; + } + if (value instanceof Number) { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return Float.parseFloat(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) { + return toFloat(value, null); + } + + /** + * 转换为Float数组
+ * + * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null + * @param values 被转换的值 + * @return 结果 + */ + public static Float[] toFloatArray(boolean isIgnoreConvertError, Object... values) { + if (CollectionKit.isEmpty(values)) { + return new Float[] {}; + } + final Float[] floats = new Float[values.length]; + for (int i = 0; i < values.length; i++) { + final Float v = toFloat(values[i], null); + if (null == v && isIgnoreConvertError == false) { + throw new ToolBoxException(StrKit.format("Convert [{}] to Float error!", values[i])); + } + floats[i] = v; + } + return floats; + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) { + case "true": + return true; + case "false": + return false; + case "yes": + return true; + case "ok": + return true; + case "no": + return false; + case "1": + return true; + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) { + return toBool(value, null); + } + + /** + * 转换为Boolean数组
+ * + * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null + * @param values 被转换的值 + * @return 结果 + */ + public static Boolean[] toBooleanArray(boolean isIgnoreConvertError, Object... values) { + if (CollectionKit.isEmpty(values)) { + return new Boolean[] {}; + } + final Boolean[] bools = new Boolean[values.length]; + for (int i = 0; i < values.length; i++) { + final Boolean v = toBool(values[i], null); + if (null == v && isIgnoreConvertError == false) { + throw new ToolBoxException(StrKit.format("Convert [{}] to Boolean error!", values[i])); + } + bools[i] = v; + } + return bools; + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) { + if (value == null) { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return Enum.valueOf(clazz, valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigInteger) { + return (BigInteger) value; + } + if (value instanceof Long) { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return new BigInteger(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof Long) { + return new BigDecimal((Long) value); + } + if (value instanceof Double) { + return new BigDecimal((Double) value); + } + if (value instanceof Integer) { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StrKit.isBlank(valueStr)) { + return defaultValue; + } + try { + return new BigDecimal(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) { + return toBigDecimal(value, null); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) { + char c[] = input.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') { + c[i] = '\u3000'; + } else if (c[i] < '\177') { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) { + char c[] = text.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') { + c[i] = ' '; + } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + // --------------------------------------------------------------------- hex + /** + * 字符串转换成十六进制字符串 + * + * @param str 待转换的ASCII字符串 + * @return 16进制字符串 + */ + public static String toHex(String str) { + return HexKit.encodeHexStr(str.getBytes()); + } + + /** + * byte数组转16进制串 + * + * @param bytes 被转换的byte数组 + * @return 转换后的值 + */ + public static String toHex(byte[] bytes) { + return HexKit.encodeHexStr(bytes); + } + + /** + * Hex字符串转换为Byte值 + * + * @param src Byte字符串,每个Byte之间没有分隔符 + * @return byte[] + */ + public static byte[] hexToBytes(String src) { + return HexKit.decodeHex(src.toCharArray()); + } + + /** + * 十六进制转换字符串 + * + * @param hexStr Byte字符串(Byte之间无分隔符 如:[616C6B]) + * @param charset 编码 {@link Charset} + * @return 对应的字符串 + */ + public static String hexStrToStr(String hexStr, Charset charset) { + return HexKit.decodeHexStr(hexStr, charset); + } + + /** + * String的字符串转换成unicode的String + * + * @param strText 全角字符串 + * @return String 每个unicode之间无分隔符 + * @throws Exception + */ + public static String strToUnicode(String strText) throws Exception { + char c; + StringBuilder str = new StringBuilder(); + int intAsc; + String strHex; + for (int i = 0; i < strText.length(); i++) { + c = strText.charAt(i); + intAsc = (int) c; + strHex = Integer.toHexString(intAsc); + if (intAsc > 128) + str.append("\\u" + strHex); + else // 低位在前面补00 + str.append("\\u00" + strHex); + } + return str.toString(); + } + + /** + * unicode的String转换成String的字符串 + * + * @param hex 16进制值字符串 (一个unicode为2byte) + * @return String 全角字符串 + */ + public static String unicodeToStr(String hex) { + int t = hex.length() / 6; + StringBuilder str = new StringBuilder(); + for (int i = 0; i < t; i++) { + String s = hex.substring(i * 6, (i + 1) * 6); + // 高位需要补上00再转 + String s1 = s.substring(2, 4) + "00"; + // 低位直接转 + String s2 = s.substring(4); + // 将16进制的string转为int + int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16); + // 将int转换为字符 + char[] chars = Character.toChars(n); + str.append(new String(chars)); + } + return str.toString(); + } + + /** + * 给定字符串转换字符编码
+ * 如果参数为空,则返回原字符串,不报错。 + * + * @param str 被转码的字符串 + * @param sourceCharset 原字符集 + * @param destCharset 目标字符集 + * @return 转换后的字符串 + */ + public static String convertCharset(String str, String sourceCharset, String destCharset) { + if (StrKit.hasBlank(str, sourceCharset, destCharset)) { + return str; + } + + try { + return new String(str.getBytes(sourceCharset), destCharset); + } catch (UnsupportedEncodingException e) { + return str; + } + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) { + String fraction[] = { "角", "分" }; + String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String unit[][] = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) { + s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } + +}