说明:
需要支持用户手动输入区间的表达式
中括号[ ]表示大于/小于等于
小括号( )表示大于/小于
如 [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");
}
}
}