记录一个当比较符与比较值合并为字符串时的通用比较方法

记录一个当比较符与比较值合并为字符串时的通用比较方法

public class CompareUtil {

    /**
     * 数据对比对外入口
     *
     * @param s   比较值
     * @param str 被比较值与比较符号拼接的字符串
     * @return
     */
    public static boolean compare(Integer s, String str) {
        //简单的对入参进行校验
        if (s == null || str == null || str.length() == 0) {
            return false;
        } else {
        	//比较符号
            StringBuffer cs = new StringBuffer();
            //比较符号之前的数字(设想中只有范围类型比较会有)
            StringBuffer start = new StringBuffer();
            //比较符号之后的数字
            StringBuffer end = new StringBuffer();
            format(str.toCharArray(), cs, start, end);
            //符号是否长度为0 或比较符后的数字长度为0
            if (cs.length() == 0 || end.length() == 0) {
                return false;
            } else if (start.length() == 0) { //是否符号之前有数字,有则调用范围类型比较方法,否则调用其他比较方法
                return compare(s, cs.toString(), Integer.parseInt(end.toString()));
            } else {
                return compare(s, cs.toString(), Integer.parseInt(start.toString()), Integer.parseInt(end.toString()));
            }
        }
    }

    /**
     * @param s   比较值
     * @param str 比较符号
     * @param n   被比较值
     * @return
     */
    static boolean compare(int s, String str, int n) {
        switch (str) {
            case ">=":
                return s >= n;
            case "<=":
                return s <= n;
            case "<>":
            case "!=":
                return s != n;
            case "=":
            case "==":
                return s == n;
            case "<":
                return s < n;
            case ">":
                return s > n;
            default:
                return false;
        }
    }

    /**
     * @param s   比较值
     * @param str 比较符号
     * @param n   被比较值1
     * @param m   被比较值2
     * @return
     */
    static boolean compare(int s, String str, int n, int m) {
        switch (str) {
            case ">=<=":
                return s >= n || s <= m;
            case ">=<":
                return s >= n || s < m;
            case "><=":
                return s > n || s <= m;
            case "><":
                return s > n || s < m;
            case "<=>=":
                return s <= n || s >= m;
            case "<=>":
                return s <= n || s < m;
            case "<>=":
                return s < n || s >= m;
            case "<>":
                return s < n || s > m;
            default:
                return false;
        }
    }

    /**
     * 对数据进行处理 出现非连续无数字字符时清空StringBuffer对象 例:1111<>2<3(非连续无数字字符)
     *
     * @param chars 处理字符集合
     * @param cs    非数字符号集合
     * @param start @cs 之前数字集合
     * @param end   @cs 之后数字集合
     */
    private static void format(char[] chars, StringBuffer cs, StringBuffer start, StringBuffer end) {
        for (char s : chars) {
            //判断是否是数字
            if ((byte) s < 58 && (byte) s > 48) {
                //判断非数字的StringBuffer对象是否有值,确定是字符前数字还是字符后数字
                if (cs.length() == 0) {
                    start.append(s);
                } else {
                    end.append(s);
                }
            } else if (end.length() == 0) {
                cs.append(s);
            } else {
                //当出现非连续无数字字符时清空StringBuffer对象
                cs.setLength(0);
                start.setLength(0);
                end.setLength(0);
                break;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值