| package com.sinata.zuul.util; | 
|   | 
| import java.io.UnsupportedEncodingException; | 
| import java.text.DecimalFormat; | 
| import java.text.NumberFormat; | 
| import java.util.*; | 
| import java.util.regex.Matcher; | 
| import java.util.regex.Pattern; | 
|   | 
| /** | 
|  * 基本数据处理工具类 | 
|  */ | 
| public class SinataUtil { | 
|     /** | 
|      * List集合分页<br/>  | 
|      * 创建人:Mryang<br/> | 
|      * 时间:2016年7月28日-下午2:58:14 <br/>  | 
|      * @param <T> | 
|      * @param pageNo | 
|      * @param pageSize | 
|      * @param list  | 
|      * @throws Exception List<UserOrderList> <br/> | 
|      */ | 
|     public static <T> List<T> listpage(int pageNo, int pageSize, List<T> list) throws Exception { | 
|         List<T> result = new ArrayList<T>(); | 
|         if (list != null && list.size() > 0) { | 
|             int allCount = list.size(); | 
|             if(pageNo > 1 && allCount < pageSize) { | 
|                 return new ArrayList<>(); | 
|             } | 
|             int pageCount = (allCount + pageSize - 1) / pageSize; | 
|             if (pageNo >= pageCount) { | 
|                 pageNo = pageCount; | 
|             } | 
|             int start = (pageNo - 1) * pageSize; | 
|             int end = pageNo * pageSize; | 
|             if (end >= allCount) { | 
|                 end = allCount; | 
|             } | 
|             for (int i = start; i < end; i++) { | 
|                 result.add(list.get(i)); | 
|             } | 
|         } | 
|         return (result != null && result.size() > 0) ? result : new ArrayList<T>(); | 
|     } | 
|   | 
|     /** | 
|      * Double类型取整 | 
|      * @param num | 
|      * @return | 
|      */ | 
|     public static String doubleTrans(double num) { | 
|         return String.valueOf((long) num); | 
|     } | 
|   | 
|     /** | 
|      * Double类型保留1位小数 | 
|      *  | 
|      * @param num | 
|      * @return | 
|      */ | 
|     public static String doubleRetainOne(double num) { | 
|         DecimalFormat dfs = new DecimalFormat("0.0"); | 
|         return dfs.format(num); | 
|     } | 
|   | 
|     /** | 
|      * Double类型保留2位小数 | 
|      *  | 
|      * @param num | 
|      * @return | 
|      */ | 
|     public static String doubleRetainTwo(double num) { | 
|         DecimalFormat dfs = new DecimalFormat("0.00"); | 
|         String.format("%.2f", num); | 
|         return dfs.format(num); | 
|     } | 
|   | 
|     /** | 
|      * Double类型保留1位小数(四舍五入) | 
|      *  | 
|      * @param num | 
|      * @return | 
|      */ | 
|     public static String doubleForwardOne(double num) { | 
|         return String.format("%.1f", num); | 
|     } | 
|   | 
|     /** | 
|      * Double类型保留2位小数(四舍五入) | 
|      *  | 
|      * @param num | 
|      * @return | 
|      */ | 
|     public static String doubleForwardTwo(double num) { | 
|         return String.format("%.2f", num); | 
|     } | 
|   | 
|     /** | 
|      * 字符串转换成Ascii | 
|      *  | 
|      * @param value | 
|      * @return | 
|      */ | 
|     public static String stringToAscii(String value) { | 
|         StringBuffer sbu = new StringBuffer(); | 
|         char[] chars = value.toCharArray(); | 
|         for (int i = 0; i < chars.length; i++) { | 
|             if (i != chars.length - 1) { | 
|                 sbu.append((int) chars[i]); | 
|             } else { | 
|                 sbu.append((int) chars[i]); | 
|             } | 
|         } | 
|         return sbu.toString(); | 
|     } | 
|   | 
|     /** | 
|      * 小数转换为百分比 | 
|      *   | 
|      * @param decimal | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static String decTurnPercent(double decimal) { | 
|         NumberFormat num = NumberFormat.getPercentInstance(); | 
|         num.setMaximumIntegerDigits(3); | 
|         num.setMaximumFractionDigits(2); | 
|         return num.format(decimal); | 
|     } | 
|   | 
|     /** | 
|      * Ascii转换成字符串 | 
|      *  | 
|      * @param value | 
|      * @return | 
|      */ | 
|     public static String asciiToString(String value) { | 
|         String[] chars = value.split(","); | 
|         StringBuffer sbu = new StringBuffer(); | 
|         for (int i = 0; i < chars.length; i++) { | 
|             sbu.append((char) Integer.parseInt(chars[i])); | 
|         } | 
|         return sbu.toString(); | 
|     } | 
|   | 
|     /** | 
|      * 字符串转换unicode | 
|      *  | 
|      * @param string | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static String string2Unicode(String string) { | 
|         StringBuffer unicode = new StringBuffer(); | 
|         for (int i = 0; i < string.length(); i++) { | 
|             // 取出每一个字符 | 
|             char c = string.charAt(i); | 
|             // 转换为unicode | 
|             unicode.append("\\u" + Integer.toHexString(c)); | 
|         } | 
|         return unicode.toString(); | 
|     } | 
|   | 
|     /** | 
|      * unicode 转字符串 | 
|      *  | 
|      * @param unicode | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static String unicode2String(String unicode) { | 
|         StringBuffer string = new StringBuffer(); | 
|         String[] hex = unicode.split("\\\\u"); | 
|         for (int i = 1; i < hex.length; i++) { | 
|             // 转换出每一个代码点 | 
|             int data = Integer.parseInt(hex[i], 16); | 
|             // 追加成string | 
|             string.append((char) data); | 
|         } | 
|         return string.toString(); | 
|     } | 
|   | 
|     /** | 
|      * 字符串编码转换的实现方法 | 
|      *  | 
|      * @param str | 
|      *            待转换编码的字符串 | 
|      * @param newCharset | 
|      *            目标编码 | 
|      * @return | 
|      * @throws UnsupportedEncodingException | 
|      */ | 
|     public static String changeCharset(String str, String newCharset) throws UnsupportedEncodingException { | 
|         if (str != null) { | 
|             // 用默认字符编码解码字符串。 | 
|             byte[] bs = str.getBytes(); | 
|             // 用新的字符编码生成字符串 | 
|             return new String(bs, newCharset); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * 注: \n 回车( ) \t 水平制表符( ) \s 空格(\u0008) \r 换行( ) | 
|      *  | 
|      * @param str | 
|      * @return | 
|      */ | 
|     public static String replaceBlank(String str) { | 
|         String dest = ""; | 
|         if (str != null) { | 
|             Pattern p = Pattern.compile("\\s*|\t|\r|\n"); | 
|             Matcher m = p.matcher(str); | 
|             dest = m.replaceAll(""); | 
|         } | 
|         return dest; | 
|     } | 
|   | 
|     /** | 
|      * 判断该字符串不能为空 | 
|      *  | 
|      * @param str | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static boolean isNotEmpty(Object str) { | 
|         return !isEmpty(str); | 
|     } | 
|      | 
|      | 
|     public static boolean isNotEmptyUndefined(Object str) { | 
|         return !isEmpty(str) && !str.toString().equals("undefined"); | 
|     } | 
|   | 
|     /** | 
|      * 字符串编码转换的实现方法 | 
|      *  | 
|      * @param str | 
|      *            待转换编码的字符串 | 
|      * @param oldCharset | 
|      *            原编码 | 
|      * @param newCharset | 
|      *            目标编码 | 
|      * @return | 
|      * @throws UnsupportedEncodingException | 
|      */ | 
|     public static String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException { | 
|         if (str != null) { | 
|             // 用旧的字符编码解码字符串。解码可能会出现异常。 | 
|             byte[] bs = str.getBytes(oldCharset); | 
|             // 用新的字符编码生成字符串 | 
|             return new String(bs, newCharset); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * 给手机号码加分割符 | 
|      *  | 
|      * @param phone | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static String splitPhone(String phone) { | 
|         if (isNotEmpty(phone)) { | 
|             String strone = phone.substring(0, 3); | 
|             String strtwo = phone.substring(strone.length(), 7); | 
|             String strthree = phone.substring(strtwo.length() + strone.length(), phone.length()); | 
|             return strone + "-" + strtwo + "-" + strthree; | 
|         } | 
|         return ""; | 
|     } | 
|   | 
|     /** | 
|      * 非空判断 | 
|      *  | 
|      * @param str | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static boolean isEmpty(Object str) { | 
|         return str == null || str.toString().length() == 0 || str.equals("") || str.toString().matches("\\s*"); | 
|     } | 
|   | 
|     /** | 
|      * 把米转换成公里 | 
|      *  | 
|      * @param km | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     public static Double kmTransKilo(Integer m) { | 
|         return Math.round(m / 100d) / 10d; | 
|     } | 
|      | 
|     /** | 
|      * 将List<{@link Object}>转换成List<{@link T}> | 
|      *  | 
|      * @param list | 
|      *            将要转换的对象 | 
|      * @param clazs | 
|      *            需要转换的泛型对象 | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     @SuppressWarnings("unchecked") | 
|     public static <T> List<T> fromToObject(List<?> list, Class<T> clazs) { | 
|         List<T> t = new ArrayList<T>(); | 
|         for (Object object : list) { | 
|             t.add((T) object); | 
|         } | 
|         return t; | 
|     } | 
|      | 
|      /** | 
|      * 生成 uuid, 即用来标识一笔单,也用做 nonce_str | 
|      * @return | 
|      */ | 
|     public static String generateUUID() { | 
|         return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32); | 
|     } | 
|      | 
|     /** | 
|      * 将List<{@link Object}>转换成List<{@link Map<String, Object>}> | 
|      *  | 
|      * @param list | 
|      * @return | 
|      * @author TaoNingBo | 
|      */ | 
|     @SuppressWarnings("unchecked") | 
|     public static List<Map<String, Object>> fromToObject_M(List<?> list) { | 
|         List<Map<String, Object>> t = new ArrayList<Map<String, Object>>(); | 
|         for (Object object : list) { | 
|             t.add((Map<String, Object>) object); | 
|         } | 
|         return t; | 
|     } | 
|      | 
|   | 
| /** | 
|  * 将对象中的null转换为空 | 
|  * @param obj | 
|  * @return | 
|  * @throws IllegalAccessException | 
|  */ | 
|   | 
| public static  Object checkObjFieldIsNull(Object obj) throws IllegalAccessException { | 
|     if(obj!=null){ | 
|         for(java.lang.reflect.Field f : obj.getClass().getDeclaredFields()){ | 
|             f.setAccessible(true); | 
|             if(f.get(obj) == null){ | 
|                 if(f.getType()==String.class){ | 
|                     f.set(obj, ""); | 
|                 } | 
|                 if(f.getType()==Double.class){ | 
|                     f.set(obj, 0d); | 
|                 } | 
|                 if(f.getType()==Integer.class){ | 
|                     f.set(obj, 0); | 
|                 } | 
|                 if(f.getType()==Date.class){ | 
|                     f.set(obj, new Date()); | 
|                 } | 
|             } | 
|         } | 
|         return obj; | 
|     } | 
|     return obj; | 
| } | 
| /** | 
|  * 获取六位标识码 | 
|  * @param length | 
|  * @return | 
|  */ | 
| public static String createRandomCharData() | 
| { | 
|     StringBuilder sb=new StringBuilder(); | 
|     Random rand=new Random();//随机用以下三个随机生成器 | 
|     Random randdata=new Random(); | 
|     int data=0; | 
|     for(int i=0;i<6;i++) | 
|     { | 
|         int index=rand.nextInt(3); | 
|         //目的是随机选择生成数字,大小写字母 | 
|         switch(index) | 
|         { | 
|         case 0: | 
|              data=randdata.nextInt(10);//仅仅会生成0~9 | 
|              sb.append(data); | 
|             break; | 
|         case 1: | 
|             data=randdata.nextInt(26)+65;//保证只会产生65~90之间的整数 | 
|             sb.append((char)data); | 
|             break; | 
|         case 2: | 
|             data=randdata.nextInt(26)+97;//保证只会产生97~122之间的整数 | 
|             sb.append((char)data); | 
|             break; | 
|         } | 
|     } | 
|     String result=sb.toString().toLowerCase(); | 
|     return result; | 
| } | 
| } |