字符串工具类

发布时间 2024-01-10 16:13:15作者: 码小白很犇

package com.dem.ceshiDemo.util;


import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;

/**
 * 字符串工具类
 */
public class StringUtils {
    /** 空字符串 */
    private static final String NULLSTR = "";

    /** 下划线 */
    private static final char SEPARATOR = '_';

    /**
     * 获取参数不为空值
     * 
     * @param value defaultValue 要判断的value
     * @return value 返回值
     */
    public static <T> T nvl(T value, T defaultValue)
    {
        return value != null ? value : defaultValue;
    }

    /**
     * * 判断一个Collection是否为空, 包含List,Set,Queue
     * 
     * @param coll 要判断的Collection
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Collection<?> coll)
    {
        return isNull(coll) || coll.isEmpty();
    }

    /**
     * * 判断一个Collection是否非空,包含List,Set,Queue
     * 
     * @param coll 要判断的Collection
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Collection<?> coll)
    {
        return !isEmpty(coll);
    }

    /**
     * * 判断一个对象数组是否为空
     * 
     * @param objects 要判断的对象数组
     ** @return true:为空 false:非空
     */
    public static boolean isEmpty(Object[] objects)
    {
        return isNull(objects) || (objects.length == 0);
    }

    /**
     * * 判断一个对象数组是否非空
     * 
     * @param objects 要判断的对象数组
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Object[] objects)
    {
        return !isEmpty(objects);
    }

    /**
     * * 判断一个Map是否为空
     * 
     * @param map 要判断的Map
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Map<?, ?> map)
    {
        return isNull(map) || map.isEmpty();
    }

    /**
     * * 判断一个Map是否为空
     * 
     * @param map 要判断的Map
     * @return true:非空 false:空
     */
    public static boolean isNotEmpty(Map<?, ?> map)
    {
        return !isEmpty(map);
    }

    /**
     * * 判断一个字符串是否为空串
     * 
     * @param str String
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(String str)
    {
        return isNull(str) || NULLSTR.equals(str.trim()) || "null".equals(str.trim()); 
    }

    /**
     * * 判断一个字符串是否为非空串
     *
     * @param str String
     * @return true:非空串 false:空串
     */
    public static boolean isNotEmpty(String str)
    {
        return !isEmpty(str);
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param obj Object
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Object obj)
    {
        return isNull(obj) || NULLSTR.equals(obj);
    }

    /**
     * * 判断一个对象是否为非空
     *
     * @param obj Object
     * @return true:非空串 false:空串
     */
    public static boolean isNotEmpty(Object obj)
    {
        return !isEmpty(obj);
    }

    /**
     * * 判断一个对象是否为空
     * 
     * @param object Object
     * @return true:为空 false:非空
     */
    public static boolean isNull(Object object)
    {
        return object == null;
    }

    /**
     * * 判断一个对象是否非空
     * 
     * @param object Object
     * @return true:非空 false:空
     */
    public static boolean isNotNull(Object object)
    {
        return !isNull(object);
    }

    /**
     * * 判断一个对象是否是数组类型(Java基本型别的数组)
     * 
     * @param object 对象
     * @return true:是数组 false:不是数组
     */
    public static boolean isArray(Object object)
    {
        return isNotNull(object) && object.getClass().isArray();
    }

    /**
     * 去空格
     */
    public static String trim(String str)
    {
        return (str == null ? "" : str.trim());
    }

    /**
     * 截取字符串
     * 
     * @param str 字符串
     * @param start 开始
     * @return 结果
     */
    public static String substring(final String str, int start)
    {
        if (str == null)
        {
            return NULLSTR;
        }

        if (start < 0)
        {
            start = str.length() + start;
        }

        if (start < 0)
        {
            start = 0;
        }
        if (start > str.length())
        {
            return NULLSTR;
        }

        return str.substring(start);
    }

    /**
     * 截取字符串
     * 
     * @param str 字符串
     * @param start 开始
     * @param end 结束
     * @return 结果
     */
    public static String substring(final String str, int start, int end)
    {
        if (str == null)
        {
            return NULLSTR;
        }

        if (end < 0)
        {
            end = str.length() + end;
        }
        if (start < 0)
        {
            start = str.length() + start;
        }

        if (end > str.length())
        {
            end = str.length();
        }

        if (start > end)
        {
            return NULLSTR;
        }

        if (start < 0)
        {
            start = 0;
        }
        if (end < 0)
        {
            end = 0;
        }

        return str.substring(start, end);
    }


    /**
     * 下划线转驼峰命名
     */
    public static String toUnderScoreCase(String str)
    {
        if (str == null)
        {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        // 前置字符是否大写
        boolean preCharIsUpperCase = true;
        // 当前字符是否大写
        boolean curreCharIsUpperCase = true;
        // 下一字符是否大写
        boolean nexteCharIsUpperCase = true;
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);
            if (i > 0)
            {
                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
            }
            else
            {
                preCharIsUpperCase = false;
            }

            curreCharIsUpperCase = Character.isUpperCase(c);

            if (i < (str.length() - 1))
            {
                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
            }

            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
            {
                sb.append(SEPARATOR);
            }
            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
            {
                sb.append(SEPARATOR);
            }
            sb.append(Character.toLowerCase(c));
        }
        return sb.toString();
    }

    /**
     * 是否包含字符串
     * 
     * @param str 验证字符串
     * @param strs 字符串组
     * @return 包含返回true
     */
    public static boolean inStringIgnoreCase(String str, String... strs)
    {
        if (str != null && strs != null)
        {
            for (String s : strs)
            {
                if (str.equalsIgnoreCase(trim(s)))
                {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld
     * 
     * @param name 转换前的下划线大写方式命名的字符串
     * @return 转换后的驼峰式命名的字符串
     */
    public static String convertToCamelCase(String name)
    {
        StringBuilder result = new StringBuilder();
        // 快速检查
        if (name == null || name.isEmpty())
        {
            // 没必要转换
            return "";
        }
        else if (!name.contains("_"))
        {
            // 不含下划线,仅将首字母大写
            return name.substring(0, 1).toUpperCase() + name.substring(1);
        }
        // 用下划线将原始字符串分割
        String[] camels = name.split("_");
        for (String camel : camels)
        {
            // 跳过原始字符串中开头、结尾的下换线或双重下划线
            if (camel.isEmpty())
            {
                continue;
            }
            // 首字母大写
            result.append(camel.substring(0, 1).toUpperCase());
            result.append(camel.substring(1).toLowerCase());
        }
        return result.toString();
    }

    /**
     * 驼峰式命名法
     * 例如:user_name->userName
     */
    public static String toCamelCase(String s)
    {
        if (s == null)
        {
            return null;
        }
        if (s.indexOf(SEPARATOR) == -1)
        {
            return s;
        }
        s = s.toLowerCase();
        StringBuilder sb = new StringBuilder(s.length());
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++)
        {
            char c = s.charAt(i);

            if (c == SEPARATOR)
            {
                upperCase = true;
            }
            else if (upperCase)
            {
                sb.append(Character.toUpperCase(c));
                upperCase = false;
            }
            else
            {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    @SuppressWarnings("unchecked")
    public static <T> T cast(Object obj)
    {
        return (T) obj;
    }
    /**
     * 把对象的属性为null的改为""
     */
    public static void setFeidValueNotNull (Object obj){
    	try {
		   for (Field field: obj.getClass().getDeclaredFields()) {
			        field.setAccessible(true);
						if (field.get(obj) == null){ 
							 if (field.getGenericType().toString().equals("class java.lang.String")) {
								 field.set(obj, "");
							 }else if (field.getGenericType().toString().equals("class java.lang.Integer")) {
								 field.set(obj, 0);
							 }else if (field.getGenericType().toString().equals("class java.lang.Double")) {
								 field.set(obj, 0.0);
							 }else if (field.getGenericType().toString().equals("class java.lang.Long")) {
								 field.set(obj, 0L);
							 }
						 }
				}
    	} catch (IllegalArgumentException | IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    
    /**
	 * 功能/function : 根据map中的key值,返回map中对应的value(String类型);
	 * 流程描述/step :
	 * 修改记录/revision :
	 *
	 */
	public static String getString(Map<?, ?> tmpMap, String key) {
		String val = "";
		Object a = tmpMap.get(key);
		try {
			if (a instanceof Integer) {
				val = String.valueOf((Integer) a);
			} else if (a instanceof String) {
				val = (String) a;
			} else if (a instanceof Double) {
				val = String.valueOf((Double) a);
			} else if (a instanceof BigDecimal) {
				val = String.valueOf(((BigDecimal) a));
			}
		} catch (Exception e) {
		}
		return val;
	}
	
	/**
	 * 按照长度截取字符串
	 * @param content
	 * @param length
	 * @return
	 */
    public static List<String> splitStr(String content, int length) {
        if (content == null) {
            return null;
        }
        int size = content.length() / length;
        if (content.length() % length != 0) {
            size += 1;
        }
        List<String> list = new ArrayList<String>();
        for (int index = 0; index < size; index++) {
            String childStr = substring(content, index * length,
                    (index + 1) * length);
            list.add(childStr);
        }
        return list;
    }
    
    /**
     * 根据传递参数 获取几位的随机数  
     * @return
     */
    
	public static String getRandom(int len) {
		 
		int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1));
		return String.valueOf(rs);
	}
	
	/**
	 * 将字符串数组 转换为 slq条件 in 字符串 格式('a','b')
	 * @param strArray
	 * @return
	 *
	 * @author Tong's family
	 * @date 2021年1月23日
	 */
	public static String toSqlInCondition(String[] strArray ){
	   StringBuffer buffer=new StringBuffer();
	   buffer.append("(");
	   for (int i = 0; i < strArray.length-1; i++) {
	       buffer.append("'"+strArray[i]+"',");
	   }
	   buffer.append("'"+strArray[strArray.length-1]+"'");
	   buffer.append(")");
	   return buffer.toString();
	}
	
	/**
	 *  数组转换为字符串,用逗号,隔开
	 * @param strArray
	 * @return
	 *
	 * @author Tong's family
	 * @date 2021年1月29日
	 */
	public static String toArrayString(String[] strArray ){
		if (StringUtils.isEmpty(strArray)) {
			return "";
		}
	   StringBuffer buffer=new StringBuffer();
	   for (int i = 0; i < strArray.length-1; i++) {
	       buffer.append(strArray[i]+",");
	   }
	   buffer.append(strArray[strArray.length-1]);
	   return buffer.toString();
	}

    /**
     * 把map建改为小写
     * @param orgMap
     * @return
     *
     * @author ymk
     * @since 2019年11月7日上午10:55:45
     */
    public static Map<String, Object> transformUpperCase(Map<String, Object> orgMap) {
        Map<String, Object> resultMap = new HashMap<>();

        if (orgMap == null || orgMap.isEmpty()) {
            return resultMap;
        }
        Set<String> keySet = orgMap.keySet();
        for (String key : keySet) {
            String newKey = key.toLowerCase();
            newKey = newKey.replace("_", "");
            if(!StringUtils.isEmpty(orgMap.get(key))) {
                resultMap.put(newKey, orgMap.get(key).toString());
            }else {
                resultMap.put(newKey, "");
            }
        }

        return resultMap;
    }

    /**
     * 把map建null改为""
     * @param orgMap
     * @return
     *
     * @author ymk
     * @since 2019年11月7日上午10:55:45
     */
    public static Map<String, Object> transformNull(Map<String, Object> orgMap) {
        Map<String, Object> resultMap = new HashMap<>();

        if (orgMap == null || orgMap.isEmpty()) {
            return resultMap;
        }
        Set<String> keySet = orgMap.keySet();
        for (String key : keySet) {
            if(!StringUtils.isEmpty(orgMap.get(key))) {
                resultMap.put(key, orgMap.get(key).toString());
            }else {
                resultMap.put(key, "");
            }
        }

        return resultMap;
    }
    
    /**
     * 把当前map建null改为""
     * @param orgMap
     * @return
     *
     * @author ymk
     * @since 2019年11月7日上午10:55:45
     */
    public static void transCurrentformNull(Map<String, Object> orgMap) {
    	Set<String> keySet = orgMap.keySet();
    	for (String key : keySet) {
    		if(!StringUtils.isEmpty(orgMap.get(key))) {
    			orgMap.put(key, orgMap.get(key).toString());
    		}else {
    			orgMap.put(key, "");
    		}
    	}
    	
    }


    /*
    以第一个实体类为主,如果第一个的实体类某个字段为空,则会吧第二个实体类的值取过来进行赋值,
    如果不为空的则不作改变
     */
	@SuppressWarnings("rawtypes")
	public static Object  combineSydwCore(Object sourceBean, Object targetBean) {
		  Class sourceBeanClass = sourceBean.getClass();
//	        Class targetBeanClass = targetBean.getClass();

	        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
	        Field[] targetFields = sourceBeanClass.getDeclaredFields();
	        for (int i = 0; i < sourceFields.length; i++) {
	            Field sourceField = sourceFields[i];
	            Field targetField = targetFields[i];
	            sourceField.setAccessible(true);
	            targetField.setAccessible(true);
	            try {
	                if (!(sourceField.get(sourceBean) == null)) {
	                    targetField.set(targetBean, sourceField.get(sourceBean));
	                }
	            } catch (IllegalArgumentException | IllegalAccessException e) {
	                e.printStackTrace();
	            }
	        }
	        return targetBean;
	}

	/**
	 * 截取字符串长度,
	 * @param realname
	 * @param length
	 * @return
	 */
	public static String subStrFirstInfo(String realname, int length) {
		String realname1 =null;
		 char[]
		 r = realname.toCharArray(); 
		if(r.length ==1){
		 realname1 = realname; 
		} 
		realname1 = realname.replaceFirst(realname.substring(length),"*********"); 
		return realname1;
	}
	
	
	/**
	 * Java List 集合去除null元素
	 * @param <T>
	 * @param oldList
	 * @return
	 */
	public static <T> List<T> removeNull(List<? extends T> oldList) { 
		//使用API方式,使用的是迭代器其本质上还是循环
		 oldList.removeAll(Collections.singleton(null)); 
		 return (List<T>) oldList; 
	}

	/**
	 * 掉所有空格,包括首尾、中间
	 * @param resource
	 * @param ch
	 * @return
	 */
	public static String removeSpaceAll(String resource, char ch) {
		
		StringBuffer buffer = new StringBuffer();
		int position = 0;
		char currentChar;

		while (position < resource.length()) {
			currentChar = resource.charAt(position++);
			if (currentChar != ch){
                buffer.append(currentChar);
            }
		}
		return buffer.toString();
	}

}