package top.imwork.window.silos.utils;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;

/**
 * Copyright (C), 2015-2022
 * FileName: StringUtils
 * Author<作者姓名>:   stars
 * CreateTime<创建时间>:   2022/5/18 16:25
 * UpdateTime<修改时间>:   2022/5/18 16:25
 * Description〈功能简述〉: 字符串处理工具
 * History<历史描述>:
 * Since<版本号>: 1.0.0
 */
public class StringUtils {
    private StringUtils() {
        // 私有构造方法
        throw new IllegalStateException("Utility class");
    }

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

    /**
     * 判断对象是否为空
     *
     * @param obj 要判断的对象
     * @return boolean  true为空false非空
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        } else if (obj instanceof Optional) {
            return !((Optional)obj).isPresent();
        } else if (obj instanceof CharSequence) {
            return ((CharSequence)obj).length() == 0;
        } else if (obj.getClass().isArray()) {
            return Array.getLength(obj) == 0;
        } else if (obj instanceof Collection) {
            return ((Collection)obj).isEmpty();
        } else {
            return obj instanceof Map ? ((Map)obj).isEmpty() : false;
        }
    }

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

    /**
     * 判断字符串是否为空字符串
     *
     * @param str 要判断的字符串
     * @return boolean  true空false非空
     */
    public static boolean isBlank(String str) {
        return "".equals(str.trim());
    }

    /**
     * 判断字符串是否为非空字符串
     *
     * @param str 要判断的字符串
     * @return boolean  true非空false空
     */
    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }
}