package com.sunxung.factoring.component.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil extends jodd.util.StringUtil {

    public static String delBlank(String str) {
        if (isEmpty(str)) {
            return str;
        }
        return str.replaceAll("[　*| *| *|\\s*]*", "");
    }

    public static boolean isEmpty(String str) {
        return isNull(str) || str.trim().length() == 0;
    }

    public static boolean isNull(String str) {
        return str == null;
    }

    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }

    public static String trim(String str) {
        return str == null ? null : str.trim();
    }

    public static String convertNull(String str) {
        if (str == null) {
            return null;
        } else if (str != null && str.length() == 0) {
            return null;
        } else {
            return str;
        }
    }


    /**
     * 是否是数字
     *
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        if (null == str || "".equals(str)) {
            return false;
        }
        String regx = "[+-]*\\d+\\.?\\d*[Ee]*[+-]*\\d+";
        Pattern pattern = Pattern.compile(regx);
        boolean isNumber = pattern.matcher(str).matches();
        if (isNumber) {
            return isNumber;
        }
        regx = "^[-\\+]?[.\\d]*$";
        pattern = Pattern.compile(regx);
        return pattern.matcher(str).matches();
    }

    /**
     * 字符串首字符大写
     *
     * @param str
     * @return
     */
    public static String firstCharToUpperCase(String str) {
        return jodd.util.StringUtil.capitalize(str);
    }

    /**
     * 字符串首字符小写
     *
     * @param str
     * @return
     */
    public static String firstCharToLowerCase(String str) {
        return jodd.util.StringUtil.uncapitalize(str);
    }

    /**
     * 去掉字符串中特定的字符
     */
    public static String deleteString(String str, char delChar) {
        String delStr = "";
        if (StringUtil.isEmpty(str)) {
            return delStr;
        }
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != delChar) {
                delStr += str.charAt(i);
            }
        }
        return delStr;
    }

    /**
     * 截取字符串
     *
     * @param str 传过来的字符如：“123_23_1_4”
     * @return List<Long> 返回long类型的集合
     */
    public static List<String> separatorCharacter(String str) {
        List<String> list = new ArrayList<>();
        String[] strArray = str.split(ConstantConversionUtil.MULTIPLE_SELECTION_SEPARATOR);
        for (String s : strArray) {
            if (StringUtil.isNotEmpty(s)) {
                list.add(s);
            }
        }
        return list;
    }

    /**
     * 去掉文字里面的换行空格
     *
     * @param str
     * @return String
     */
    public static String formatStr(String str) {
        if (StringUtil.isNotEmpty(str)) {
            String re = "\\s*|\\t*|\\r*|\\n*|";
            str = str.replaceAll(re, "");
            return str.trim();
        }
        return null;
    }

    /**
     * 去掉文字里面的逗号和换行空格
     *
     * @param str
     * @return String
     */
    public static String formatStrT(String str) {
        if (StringUtil.isNotEmpty(str)) {
            String s = formatStr(str);
            str = s.replaceAll(",", "");
            str = str.replaceAll("，", "");
            return str.trim();
        }
        return null;
    }


    public static String subZeroAndDot(String s) {
        if (StringUtil.isNotEmpty(s)) {
            if (s.indexOf(".") > 0) {
                s = s.replaceAll("0+?$", "");// 去掉多余的0
                s = s.replaceAll("[.]$", "");// 如最后一位是.则去掉
            }
        }
        return s;
    }

    public static String stringFilter(String str) {
        if (StringUtil.isNotEmpty(str)) {
            String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）－——+-|{}【】‘；：”“’。，、△？0123456789]";
            Pattern p = Pattern.compile(regEx);
            Matcher m = p.matcher(str);
            return m.replaceAll("").trim();
        }
        return null;
    }

    /**
     * 格式化数字：如把数字 1 格式化成 01；对“%02d”解释：0 代表前面补充0 、 2 代表长度为2 、 d 代表参数为正数型
     *
     * @param num 传的数字
     * @return String 处理后的结果
     */
    public static String formatNumber(int num) {
        return String.format("%02d", num);
    }

    /**
     * 删除所有的HTML标签
     *
     * @param source 需要进行除HTML的文本
     * @return
     */
    public static String deleteAllHTMLTag(String source) {

        if (source == null) {
            return "";
        }

        String s = source;
        /** 删除普通标签  */
        s = s.replaceAll("<(S*?)[^>]*>.*?|<.*? />", "");
        /** 删除转义字符 */
        s = s.replaceAll("&.{2,6}?;", "");
        return s;
    }
}
