原创

Java-校验值区间值的连续性

//c<30,30≤c<60,60≤c<100,100≤c 有值时,必须收尾相等。

    BigDecimal endCheckValue = null;
    for (BssCompareMethodParameterConfigAddVO configRow : actualSampleCompareList) {
        endCheckValue = checkAddGetNextEndValueFromRow(endCheckValue, configRow);
    }
    //校验通过了后记录当前行,并取下一个开始的
    private BigDecimal checkAddGetNextEndValueFromRow(BigDecimal lastValue, String measureValueRange, String rowKey) {
        if (StringUtils.isBlank(measureValueRange)) {
            return null;
        }
        //c<30,30≤c<60,60≤c<100,100≤c
        List<BigDecimal> decimals = getNumeralFromStr(measureValueRange);
        if (CollectionUtils.isEmpty(decimals)) {
            throw new GnException(rowKey + "未填写正确的参比法测量值(c)区间:" + measureValueRange);
        }
        BigDecimal startCheckValue = decimals.get(0);

        if (lastValue != null && !lastValue.equals(startCheckValue)) {
            //注意,如果前端提交的两组的名称相同,那后端的逻辑分组就变成了1组
            //如果需要校验名称重复,应该需要新增字段表示分组,启用 BssAnalysisMethodResultShowParameterConfigSaveVO::getAnalysisMethodUniqueTag
            //不过没意义,分组字段和方法名称都需要前端控制不同,功能上实际是重复,且还需要保存。
            throw new GnException(rowKey + "存在错误的参比法测量值(c)区间:" + measureValueRange);
        }
        //endCheckValue
        return decimals.size() == 2 ? decimals.get(1) : startCheckValue;
    }


    private static List<BigDecimal> getNumeralFromStr(String expression) {
        // 正则表达式匹配数字
        Pattern pattern = Pattern.compile("[-+]?\\d*\\.?\\d+");
        Matcher matcher = pattern.matcher(expression);
        List<BigDecimal> numbers = new ArrayList<>();

        // 查找并收集所有找到的数字
        while (matcher.find()) {
            String numberStr = matcher.group();
            BigDecimal number = new BigDecimal(numberStr);
            numbers.add(number);
        }
        return numbers;
    }

    public static void main(String[] args) {
        // 示例输入字符串 Pattern.compile("[-+]?\\d*\\.?\\d+");
        String expression = "c<30";
        System.out.println(getNumeralFromStr(expression));
        expression = "30≤c<60";
        System.out.println(getNumeralFromStr(expression));
        expression = "60≤c<100.3";
        System.out.println(getNumeralFromStr(expression));
        expression = "100≤c";
        System.out.println(getNumeralFromStr(expression));

    }
}
正文到此结束
本文目录