数字区间表达式校验工具类

说明:

需要支持用户手动输入区间的表达式
中括号[ ]表示大于/小于等于
小括号( )表示大于/小于
如 [18,60) 表示大于等于18小于60

另外一种就是单个区间 [18]表示大于等于18 (18)表示大于18

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

/**
* 数字区间表达式工具类
* @author ppp
* @date 2024/6/25
*/
public class NumberRangeCheckUtil {

    /**
     * 区间表达式是否合规
     * @param expression 如 [18,60) 表示大于等于18小于60
     * 中括号[ ]表示大于/小于等于
     * 小括号( )表示大于/小于
     * @return 是否正确
     */
    public static boolean isRangeExpressionValid(String expression) {
        // 使用正则表达式匹配给定的表达式
        String regex = "\\[\\d+,\\d+\\]|\\(\\d+,\\d+\\]|\\[\\d+,\\d+\\)|\\(\\d+,\\d+\\)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(expression);
        return matcher.matches();
    }

    /**
     * 表达式是否合规
     * @param expression 如 [18] 表示大于等于  (18)表示大于18
     * 中括号表示大于等于
     * 小括号表示大于
     * @return 是否正确
     */
    public static boolean isExpressionValid(String expression) {
        // 使用正则表达式匹配给定的表达式
        String regex = "\\[\\d+\\]|\\(\\d+\\)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(expression);
        return matcher.matches();
    }

    /**
     * 校验数字是否在区间范围内
     * @param expression 区间表达式 [60]
     * @param number 数字
     * @return 是否在区间内
     */
    public static boolean isNumberInRange(String expression, int number) {
        if (!isExpressionValid(expression)) {
            throw new IllegalArgumentException("Invalid expression format");
        }

        // 解析表达式中的数字范围
        int bound = Integer.parseInt(expression.substring(1, expression.length() - 1));

        // 判断数字是否在范围内
        if (expression.startsWith("[") && expression.endsWith("]")) {
            return number >= bound;
        } else if (expression.startsWith("(") && expression.endsWith(")")) {
            return number > bound;
        }

        return false;
    }

    /**
     * 校验数字是否在区间范围内
     * @param expression 区间表达式 [18,60]
     * @param number 数字
     * @return 是否在区间内
     */
    public static boolean isNumberInDoubleRange(String expression, int number) {
        if (!isRangeExpressionValid(expression)) {
            throw new IllegalArgumentException("Invalid expression format");
        }

        // 解析表达式中的数字范围
        int lowerBound = Integer.parseInt(expression.substring(1, expression.indexOf(',')));
        int upperBound = Integer.parseInt(expression.substring(expression.indexOf(',') + 1, expression.length() - 1));

        // 判断数字是否在范围内
        if (expression.startsWith("[") && expression.endsWith("]")) {
            return number >= lowerBound && number <= upperBound;
        } else if (expression.startsWith("(") && expression.endsWith("]")) {
            return number > lowerBound && number <= upperBound;
        } else if (expression.startsWith("[") && expression.endsWith(")")) {
            return number >= lowerBound && number < upperBound;
        } else if (expression.startsWith("(") && expression.endsWith(")")) {
            return number > lowerBound && number < upperBound;
        }

        return false;
    }



    public static void main(String[] args) {
        String expression = "[18,60)";
        int number = 60;
        if (isRangeExpressionValid(expression)) {
            System.out.println("Number is in range: " + isNumberInDoubleRange(expression, number));
        } else {
            System.out.println("Expression false");
        }
        String expression2 = "[18]";
        int number2 = 60;
        if (isExpressionValid(expression2)) {
            System.out.println("Number is in range: " + isNumberInRange(expression2, number2));
        } else {
            System.out.println("Expression false");
        }
    }

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值