package com.mixsmart.utils;
import com.jfirer.baseutil.encrypt.Md5Util;
import com.mixsmart.constant.IMixConstant;
import com.mixsmart.exception.NullArgumentException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* @Description:字符串处理工具类
* @author:rock
* @time:2020年4月21日 下午12:05:04
* @version 1.0
*/
public class StringUtils {
private StringUtils() {
throw new UnsupportedOperationException("StringUtils类无法实例化");
}
private static final String CHARSET_NAME = "UTF-8";
/**
* 判断是否为空
* @param value 内容
* @return 为空返回:true;否则返回:false
*/
public static boolean isEmpty(String value) {
return (null==value || value.trim().length()==0);
}
/**
* @Description 批量判读为空
* @Param [values]
* @return boolean
* @Author yangyj
* @Date 2021.11.05 13:42
**/
public static boolean isEmpty(Object ...values) {
for(Object value:values){
if(!isEmpty(value)){
return false;
}
}
return true;
}
/**
* 判断是否不为空
* @param value 内容
* @return 不为空返回:true;否则返回:false
*/
public static boolean isNotEmpty(String value) {
return !isEmpty(value);
}
/**
* 判断参数;如果参数value
为空;
* 则抛出参数为空异常(运行时异常)
* @param value 需要判断的参数
* @param msg 提示信息
*/
public static void isAssert(Object value, String msg) {
msg = isEmpty(msg)?"提供的参数为空":msg;
if(null == value) {
throw new NullArgumentException(msg);
}
if(value instanceof String) {
if(isEmpty(value.toString())) {
throw new NullArgumentException(msg);
}
} else if(value instanceof Collection) {
if(CollectionUtils.isEmpty((Collection>)value)) {
throw new NullArgumentException(msg);
}
} else if(value.getClass().isArray()) {
if(ArrayUtils.isEmpty((Object[])value)) {
throw new NullArgumentException(msg);
}
}
}
/**
* 判断值是否相等
* @param value1
* @param value2
* @return 相等返回:true;否则返回:false
*/
public static boolean isEquals(Object value1, Object value2) {
boolean is = false;
if(null != value1 && null != value2) {
is = value1.toString().equals(value2.toString());
} else if(null == value1 && null == value2) {
is = true;
}
return is;
}
/**
* 判断值是否不相等
* @param value1
* @param value2
* @return 相等返回:true;否则返回:false
*/
public static boolean isNotEquals(Object value1, Object value2) {
return !isEquals(value1, value2);
}
/**
* 判断值是否相等(不区分大小写)
* @param value1
* @param value2
* @return 相等返回:true;否则返回:false
*/
public static boolean isEqualsIgnoreCase(Object value1, Object value2) {
boolean is = false;
if(null != value1 && null != value1) {
is = value1.toString().equalsIgnoreCase(value2.toString());
} else if(null == value1 && null == value1) {
is = true;
}
return is;
}
/**
* 判断值是否不相等(不区分大小写)
* @param value1
* @param value2
* @return 相等返回:true;否则返回:false
*/
public static boolean isNotEqualsIgnoreCase(Object value1, Object value2) {
return !isEqualsIgnoreCase(value1, value2);
}
/**
* null转换为“”
* @param obj
* @return 返回处理后的结果
*/
public static String handleNull(Object obj) {
if (null == obj) {
return "";
} else {
return obj.toString().trim();
}
}
/**
* 当值为null转化为“null”
* @param obj
* @return 返回处理后的结果
*/
public static String nullToStr(Object obj) {
if (null == obj) {
return "null";
} else {
return obj.toString().trim();
}
}
/**
* 对象转化为整型
*
注:该方法已过时,请用{@link #handleObj2Integer(Object)} 代替
* @param obj * @return 返回转化结果 */ public static Integer handObj2Integer(Object obj) { return handleObj2Integer(obj); } /** * 对象转化为整型 * @param obj * @return 返回转化结果 */ public static Integer handleObj2Integer(Object obj) { if (null == obj) { return 0; } else { double value = 0; try { value = Double.parseDouble(obj.toString()); } catch (Exception ex) { value = 0; } return (int)value; } } /** * @Description 对象转Double * @Param [obj, scale] * @return java.lang.Double * @Author yangyj * @Date 2022.04.20 14:15 **/ public static Double obj2Double(Object obj,Object scale){ if(StringUtils.isNumber(obj)){ if(StringUtils.isNumber(scale)){ obj=new BigDecimal(StringUtils.number2String(obj,scale)); } BigDecimal big = new BigDecimal(obj.toString()); return big.doubleValue(); } return null; } public static Double obj2Double(Object obj){ return obj2Double(obj,null); } /** * 数字null转换为“0” * @param obj * @return 返回转化结果 */ public static String handleNumNull(Object obj) { if (null == obj) { return "0"; } else { return obj.toString().trim(); } } /** * 判断是否为数字(包括小数) * @param value * @return 数字返回:true;否则返回:false */ public static boolean isNum(Object value) { boolean is = false; if(value != null) { Pattern pattern = Pattern.compile("\\d+|\\d+\\.\\d+"); Matcher matcher = pattern.matcher(value.toString()); if(matcher.matches()) { is = true; } else { is = false; } } return is; } /** * 判断是否数字整数 * @param value * @return 是返回:true;否则返回:false */ public static boolean isInteger(String value) { boolean is = false; Pattern pattern = Pattern.compile("\\d+"); if(null != value && value.length()>1) { pattern = Pattern.compile("^[1-9]\\d+"); } Matcher matcher = pattern.matcher(value); if(matcher.matches()) { is = true; } else { is = false; } return is; } /** * 判断是否小数 * @param value * @return 是返回:true;否则返回:false */ public static boolean isDecimal(String value) { boolean is = false; Pattern pattern = Pattern.compile("\\d+\\.\\d+"); Matcher matcher = pattern.matcher(value); if(matcher.matches()) { is = true; } else { is = false; } return is; } /** * 随机生成数 * @param num 要生成随机数的个数 * @return 返回随机生成数 */ public static String randomNum(int num) { Random random = new Random(); String numStr = ""; for (int i = 0; i < num; i++) { numStr += random.nextInt(10); } return numStr; } /** * 按日期格式生成序列号 * @param dateFormaterStr 日期格式 * @return 返回序列号 */ public static String createSerialNum(String dateFormaterStr) { String serialNum = null; if(isNotEmpty(dateFormaterStr)) { SimpleDateFormat dateFormatter = new SimpleDateFormat(dateFormaterStr); serialNum = dateFormatter.format(new Date()); dateFormatter = null; } return serialNum; } /** * 生成序列号; * TODO 改为采用UUID生成序列号 * 生成的序列号;如:U+时间+5位随机序列号 * 如:U141264925197606685 * @return 返回系统自动生成的序列号 */ public static String createSerialNum() { /*long time = System.currentTimeMillis(); return "U"+time+randomNum(5);*/ return uuid(); } /** * 生成UUID序列号 * @return 返回UUID */ public static String uuid() { String value = UUID.randomUUID().toString(); value = value.replaceAll("-", ""); return value.substring(0, 28); } public static String uuid(int max) { String value = UUID.randomUUID().toString(); value = value.replaceAll("-", ""); return value.substring(0, max); } /** * 获取文件后缀 * @param fileName * @return 返回文件后缀 */ public static String getFileSuffix(String fileName) { int index = fileName.lastIndexOf("."); if(index != -1) { return fileName.substring(index + 1); } return ""; } /** * 去掉文件后缀 * @param fileName * @return 返回文件后缀 */ public static String trimFileSuffix(String fileName) { return fileName.substring(0,fileName.lastIndexOf(".")); } /** * 大写字母直接用下划线分割,并把大写转换为小写