zhanghua
2024-09-05 a4cd4c2d98392cd1036f36b96c262878743a7e63
ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java
New file
@@ -0,0 +1,375 @@
package com.ycl.common.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommonUtils {
   /**
    * 检查对象是否为空
    *
    * @param obj
    *            java任意类型
    * @return
    */
   @SuppressWarnings("rawtypes")
   public static boolean isEmpty(Object obj) {
      if (obj == null) {
         return true;
      } else if (obj instanceof String && (obj.toString().trim().equals(""))) {
         return true;
      } else if (obj instanceof Number && ((Number) obj).doubleValue() < 0) {
         return true;
      } else if (obj instanceof Collection && ((Collection) obj).isEmpty()) {
         return true;
      } else if (obj instanceof Map && ((Map) obj).isEmpty()) {
         return true;
      } else if (obj instanceof Object[] && ((Object[]) obj).length == 0) {
         return true;
      }
      return false;
   }
   /**
    * 检查n个对象是否为空
    *
    * @param obj
    * @return
    */
   public static boolean isEmpty(Object... obj) {
      boolean res = false;
      for (Object o : obj) {
         if (isEmpty(o)) {
            res = true;
            break;
         }
      }
      return res;
   }
   /**
    *
    *
    * @param obj
    * @return
    */
   @SuppressWarnings("rawtypes")
   public static boolean hasLength(Object obj, int length) {
      if (obj == null) {
         return false;
      } else if (obj instanceof String) {
         return obj.toString().trim().length() == length;
      } else if (obj instanceof Collection) {
         return ((Collection) obj).size() == length;
      } else if (obj instanceof Map) {
         return ((Map) obj).size() == length;
      } else if (obj instanceof Object[]) {
         return ((Object[]) obj).length == length;
      }
      return false;
   }
   /**
    * 检查对象是否不为空
    *
    * @param obj
    * @return
    */
   public static boolean isNotEmpty(Object obj) {
      return !isEmpty(obj);
   }
   /**
    * 检查对象是否不为空
    *
    * @param obj
    * @return
    */
   public static boolean isNotEmpty(Object... obj) {
      boolean res = true;
      for (Object o : obj) {
         if (isEmpty(o)) {
            res = false;
         }
      }
      return res;
   }
   /**
    * 克隆一个对象
    *
    * @param obj
    * @return
    * @throws Exception
    */
   public static Object cloneObject(Object obj) throws Exception {
      ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
      ObjectOutputStream out = new ObjectOutputStream(byteOut);
      out.writeObject(obj);
      ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
      ObjectInputStream in = new ObjectInputStream(byteIn);
      return in.readObject();
   }
   /**
    * 判断是否为中文
    *
    * @param c
    * @return
    */
   public static boolean isChinese(char c) {
      Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
      if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
            || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
            || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
            || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
            || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
            || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
         return true;
      }
      return false;
   }
   public static boolean isChinese(String str) {
      if (null != str && str.length() > 0) {
         char[] chares = str.toCharArray();
         for (char c : chares) {
            if (isChinese(c))
               return true;
         }
      } else
         return false;
      return false;
   }
   /**
    * 判断是否为中文乱码
    *
    * @param strName
    * @return
    */
   public static boolean hasMessyCode(String target) {
      Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");
      Matcher m = p.matcher(target);
      String after = m.replaceAll("");
      String temp = after.replaceAll("}", "");
      char[] ch = temp.trim().toCharArray();
      float chLength = ch.length;
      float count = 0;
      for (int i = 0; i < ch.length; i++) {
         char c = ch[i];
         if (!Character.isLetterOrDigit(c)) {
            if (!isChinese(c)) {
               count = count + 1;
            }
         }
      }
      float result = count / chLength;
      if (result > 0.4) {
         return true;
      } else {
         return false;
      }
   }
   /**
    * 生成N位随机数
    *
    * @return
    */
   public static String getRandom(int N) {
      int[] rand = new int[N];
      StringBuffer numString = new StringBuffer();
      for (int i = 0; i < rand.length; i++) {
         rand[i] = (Integer) new Random().nextInt(9);
         numString.append(rand[i]);
      }
      return numString.toString();
   }
   /**
    * 同类对象属性复制(private,public) 复制出来的为新对象
    *
    * @param object
    * @return
    * @throws Exception
    */
   public static Object copyThisToNewOne(Object object) throws Exception {
      Class<?> classType = object.getClass();
      Object obj = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
      Field[] fields = classType.getDeclaredFields();
      for (Field field : fields) {
         if (Modifier.isPrivate(field.getModifiers())) {// 只需要私有字段
            String name = field.getName();
            String firstLetter = name.substring(0, 1).toUpperCase();
            String getMethodName = "get" + firstLetter + name.substring(1);
            String setMethodName = "set" + firstLetter + name.substring(1);
            Method getMethod = classType.getMethod(getMethodName, new Class[] {});
            Method setMethod = classType.getMethod(setMethodName, new Class[] { field.getType() });
            Object value = getMethod.invoke(object, new Object[] {});
            if (value != null) {
               setMethod.invoke(obj, new Object[] { value });
            }
         } else {
            // System.out.println(field.get(object));
            obj.getClass().getField(field.getName()).set((Object) obj, field.get(object));
         }
      }
      return obj;
   }
   /**
    * 同类对象属性复制(private,public) 把2个已有的对象属性进行复制 此方法src代表来源数据对象,
    * result代表要把src中的属性复制到的对象
    *
    * @param object
    * @return
    * @throws Exception
    */
   public static Object copyThisToAnother(Object src, Object result) throws Exception {
      Class<?> classType = src.getClass();
      Object obj = classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
      Field[] fields = classType.getDeclaredFields();
      for (Field field : fields) {
         if (Modifier.isPrivate(field.getModifiers())) {// 只需要私有字段
            String name = field.getName();
            String firstLetter = name.substring(0, 1).toUpperCase();
            String getMethodName = "get" + firstLetter + name.substring(1);
            String setMethodName = "set" + firstLetter + name.substring(1);
            Method getMethod = classType.getMethod(getMethodName, new Class[] {});
            Method setMethod = classType.getMethod(setMethodName, new Class[] { field.getType() });
            Object value = getMethod.invoke(src, new Object[] {});
            if (value != null) {
               setMethod.invoke(result, new Object[] { value });
            }
         } else {
            // System.out.println(field.get(src));
            obj.getClass().getField(field.getName()).set(result, field.get(src));
         }
      }
      return result;
   }
   public static String getRandomString(int length) { // length表示生成字符串的长度
      String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
      Random random = new Random();
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < length; i++) {
         int number = random.nextInt(base.length());
         sb.append(base.charAt(number));
      }
      return sb.toString();
   }
   public static String getUpperStringRandom(int length) { // length表示生成字符串的长度
      return getRandomString(length).toUpperCase();
   }
   /**
    * 数字随机码码
    *
    * @param length
    * @return
    */
   public static String getDigitRandom(int length) { // length表示生成字符串的长度
      String base = "0123456789";
      Random random = new Random();
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < length; i++) {
         int number = random.nextInt(base.length());
         sb.append(base.charAt(number));
      }
      return sb.toString();
   }
   public static String getFormatParam(Object... obj) { // length表示生成字符串的长度
      StringBuffer sb = new StringBuffer();
      for (Object o : obj) {
         if (CommonUtils.isEmpty(sb.toString()))
            sb.append(o.toString());
         else
            sb.append("," + o.toString());
      }
      return sb.toString();
   }
   /**
    * 获取一个时间格式的编号
    *
    * @param random
    * @return yyyyMMddHHmmss + random(bit)
    */
   public static String getIdentityByTime(int random) {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
      Date date = new Date();
      return dateFormat.format(date) + getDigitRandom(random);
   }
   public static String getUUID(boolean hasSplit) {
      UUID uuid = UUID.randomUUID();
      return hasSplit ? uuid.toString() : uuid.toString().replace("-", "");
   }
   public static <T> List<T> removeNull(List<? extends T> oldList) {
      oldList.removeAll(Collections.singleton(null));
        Iterator  iterator =   oldList.iterator();
      while (iterator.hasNext()) {
         if (checkIsEtmy(iterator.next())) {
            iterator.remove();
         }
      }
      return (List<T>) oldList;
   }
   public static boolean checkIsEtmy(Object o) {
       boolean flag = true;
      //获取参数类
      Class cls = o.getClass();
      //将参数类转换为对应属性数量的Field类型数组(即该类有多少个属性字段 N 转换后的数组长度即为 N)
      Field[] fields = cls.getDeclaredFields();
      for(int i = 0;i < fields.length; i ++){
         Field f = fields[i];
         f.setAccessible(true);
         //f.getName()得到对应字段的属性名,f.get(o)得到对应字段属性值,f.getGenericType()得到对应字段的类型
         try {
            if (f.get(o)!=null&&!"".equals(f.get(o).toString())) {
               flag = false;
            }
         } catch (IllegalArgumentException | IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
      return flag;
   }
}