当前位置: 首页 > news >正文

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

最新版本更新
https://code.jiangjiesheng.cn/article/363?from=csdn

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;
}

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));

}

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;
}

最新版本更新
https://code.jiangjiesheng.cn/article/363?from=csdn

相关文章:

  • 每天学一个 Linux 命令(6):shutdown
  • Java八股
  • 【设计模式】三十二、策略模式
  • buu-bjdctf_2020_babystack2-好久不见51
  • Nodejs 项目打包部署方式
  • 博客系统自动化测试报告
  • Java实现十大经典排序算法详解
  • firefly经典蓝牙和QProcess记录
  • MinIO
  • 使用 Apktool 反编译、修改和重新打包 APK
  • 1978-2022年全国及31省农业机械总动力数据(无缺失)
  • 开源ORB_SLAM2项目编译常见问题与应对办法
  • 分布式(一):CAPBASE理论
  • Excel(实战):INDEX函数和MATCH函数
  • QSettings修改配置后强制重启应用导致配置文件大小为0问题
  • 基于Azure Delta Lake与Databricks的医疗数据变更管理
  • 优选算法训练篇08--力扣15.三数之和(难度中等)
  • 第4章 IP网络扫描(网络安全评估)
  • 【科研杂记_10】国家行政区划可视化
  • [特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦
  • 【社论】打破“隐形高墙”,让老年人更好融入社会
  • “养胃骗局”大公开,真正有用的方法究竟是?
  • 奥古斯都时代的历史学家李维
  • 缅甸内观冥想的历史漂流:从“人民鸦片”到东方灵修
  • 澎湃·镜相第二届非虚构写作大赛初选入围名单公示
  • 绿景中国地产:洛杉矶酒店出售事项未能及时披露纯属疏忽,已采取补救措施