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

【脚本】JAVA 执行 阿里QLExpress 动态脚本 demo 基础版 增加项目灵活性

第一步 增加依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/QLExpress --> <dependency> <groupId>com.alibaba</groupId> <artifactId>QLExpress</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.dromara.hutool</groupId> <artifactId>hutool-all</artifactId> <version>6.0.0-M11</version> </dependency>

方案一

简单demo

语法

如果 (语文+数学+英语>270) 则 '及格' 否则 '不及格' //返回 及格
package com.study.Script.QLExpress.简单demo; import com.guanwei.study.tools.WTools; import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; public class QLExpressDemo { public static void main(String[] args) throws Exception { ExpressRunner runner = new ExpressRunner(); DefaultContext<String, Object> context = new DefaultContext<String, Object>(); context.put("a",1); context.put("b",2); context.put("c",3); String express = "(a+b*c-5)x50.11%"; express = WTools.mathUtil.transitionFormula(express); System.out.println(express); Object r = runner.execute(express, context, null, true, false); System.out.println(r); runner.addOperatorWithAlias("如果", "if",null); runner.addOperatorWithAlias("则", "then",null); runner.addOperatorWithAlias("否则", "else",null); runner.addOperatorWithAlias("返回", "return",null); String exp = "如果 (语文+数学+英语>270) 则 '及格' 否则 '不及格'"; context = new DefaultContext<String, Object>(); context.put("语文",30); context.put("数学",2); context.put("英语",3); Object execute = runner.execute(exp, context, null, false, false); System.out.println(execute); } }

工具

package com.guanwei.study.tools; import com.guanwei.study.math.MathUtil; public class WTools { public static MathUtil mathUtil = new MathUtil(); }

工具 解析特殊符号 转换为 QLExpress 能看懂的

package com.guanwei.study.math; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ReUtil; import com.guanwei.study.string.CharUtil; import org.dromara.hutool.core.text.StrUtil; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class MathUtil { /** * 转换符号 公式等 * % + - * / * @param exp * @return */ public String transitionFormula(String exp){ // exp = "+"; //全角转半角 exp = CharUtil.toDbc(exp); //所有字符转为小写 exp = exp.toLowerCase(); exp = exp .replaceAll("﹢", "+") .replaceAll("十", "+") .replaceAll("┼", "+") .replaceAll("╋", "+") .replaceAll("╬", "+") .replaceAll("﹣", "-") .replaceAll("一", "-") .replaceAll("x", "*") .replaceAll("×", "*") .replaceAll("╳", "*") .replaceAll("х", "*") .replaceAll("·", "*") .replaceAll("÷", "/") .replaceAll("\\{", "(") .replaceAll("}", ")") .replaceAll("\\[", "(") .replaceAll("]", ")") ; //包含百分号 if(exp.contains("%")){ //获取包含百分号的数字 List<String> resultFindAll = ReUtil.findAll("([\\d])*%|(\\d{1,10}).([\\d])*%", exp, 0, new ArrayList<String>()); // List<String> resultFindAll2 = ReUtil.findAll("([\\d+])*%|([\\d+{1,10}]).([\\d+])*%", exp, 0, new ArrayList<String>()); if(CollUtil.isNotEmpty(resultFindAll)){ for (String s : resultFindAll) { s = s.trim(); String replace = s.replace("%", ""); if(StrUtil.isBlank(replace)){ exp = exp.replaceAll(s, "0"); }else{ BigDecimal bigDecimal = new BigDecimal(replace); bigDecimal = bigDecimal.divide(new BigDecimal(100)); exp = exp.replaceAll(s, bigDecimal.toString()); } } } System.out.println(resultFindAll); } return exp; } }
http://www.gsyq.cn/news/1471608.html

相关文章:

  • 西北玻璃隔断厂家技术实力实测与专业选型指南:甘肃卫生间隔断/甘肃双玻百叶隔断/甘肃定制隔断/甘肃成品隔断/甘肃活动隔断/选择指南 - 优质品牌商家
  • 传统企业转型必看!全方位拆解企业数字化经营落地路径
  • 告别MCU引脚焦虑:用TIC12400-Q1的SPI接口轻松管理24路开关检测(附完整C代码)
  • PuTTY vs CuteCom:在Ubuntu上调试Arduino/树莓派,我最终选择了它
  • 西宁草毯厂家实力排行:西宁园林养护药品、西宁木制品加工厂、西宁木制品厂家、西宁树木保护支架、西宁树木固定支架、西宁树木涂白剂厂家选择指南 - 优质品牌商家
  • 以太网安全基础
  • 如何通过ExifToolGUI高效管理海量照片元数据:专业摄影师必备的5大实战场景
  • 本地闭环流处理技术,实现军营高保密等级视频孪生应用
  • PHP预测算法原理、常用类型与实际应用详解
  • 用STorM32 GUI和Data Display窗口,像调试软件一样调校你的三轴云台PID
  • 1篇1章1节:医药数据科学的历程和发展,用R语言探索数据科学(2026年版)
  • 手把手教你用QT5和libmodbus模拟工业现场:一台PC同时扮演主机和多个从机
  • 深度解析 Go 编译器:优化 GC 三色标记法执行效率时的底层逻辑
  • 2026甘肃手工板厂家选型指南:银川净化板/青海净化板/兰州中空玻镁净化板/兰州中空玻镁岩棉净化板/兰州净化板生产厂家/选择指南 - 优质品牌商家
  • Arco Design Mobile:构建现代化移动应用的终极指南
  • 华为AP刷机避坑指南:Fit转Fat后,这些基础网络配置你做了吗?(以AP3010DN-V2为例)
  • 无需下载PS,用快马AI五分钟生成你的第一个网页设计原型
  • 用GPT-4自动化构建Plotly时间范围滑块可视化
  • Mythos能力解析:隐性知识建模与动态前提图谱技术
  • 企业微信 SCRM 私有化部署全解析:2026 年费用、定制开发与数据安全指南 - 资讯纵览
  • 多维聚合中的数据变形:维度对齐、度量归一化与后变形三步法
  • 2026兰州工业平开门厂家评测:甘肃工业门、兰州人行通道闸、兰州伸缩门、兰州保温卷帘门、兰州卷帘门、兰州工业厂房门选择指南 - 优质品牌商家
  • 北京离婚财产分割纠纷不好解决怎么办?2026年北京这5家离婚律师推荐 - 本地品牌推荐
  • Jekyll-theme-H2O终极配置教程:从零到一打造专业博客
  • GPT-4的2%参数激活真相:MoE稀疏计算与工程权衡
  • 暗黑破坏神2存档编辑终极指南:5分钟掌握可视化修改神器
  • 别再死记硬背了!一张图搞懂LTE频段、带宽与EARFCN的换算关系(附实用查询表)
  • AI赋能:让快马平台智能助手帮你搞定MyBatis复杂配置与优化
  • 掌握rnn库社区生态:新手如何贡献代码和参与项目开发
  • 深度解析:吸顶式空气消毒机,核心原理与应用场景 - 资讯纵览