当前位置: 首页 > 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.jsqmd.com/news/959929/

相关文章:

  • 新手入门LSTM:在快马平台生成你的第一个时间序列预测项目
  • 2026年常州合同纠纷律师实力对比 5位深耕实战专家深度测评,陈志豪律师15年经验推荐 - 本地品牌推荐
  • 如何实现跨域
  • 深度掌握AMD Ryzen处理器调校:SMUDebugTool完整技术指南
  • PuTTY vs CuteCom:在Ubuntu上调试Arduino/树莓派,我最终选择了它
  • Spark可扩展性四大核心实践:规避Driver崩溃与Shuffle瓶颈
  • 西宁草毯厂家实力排行:西宁园林养护药品、西宁木制品加工厂、西宁木制品厂家、西宁树木保护支架、西宁树木固定支架、西宁树木涂白剂厂家选择指南 - 优质品牌商家
  • 手把手教你使用Python爬取Pexels视频素材:从入门到精通
  • 甘肃便携式汽车衡实测评测:甘肃地磅汽车衡/甘肃地磅称重仪表/甘肃小型地磅/甘肃数字汽车衡/甘肃无人值守地磅/甘肃无人值守汽车衡称重系统/选择指南 - 优质品牌商家
  • 手把手教你用Matlab实现CZT:从原理到代码,搞懂Chirp Z变换和FFT到底有啥不同
  • 2026兰州钢结构施工厂家选型:兰州钢结构厂房/兰州钢结构大棚/兰州钢结构工程/兰州钢结构库房/兰州钢结构建造/选择指南 - 优质品牌商家
  • 如何通过ExifToolGUI高效管理海量照片元数据:专业摄影师必备的5大实战场景
  • 甘肃儿童纸尿裤批发技术选型与优质供应商实操指南:笑爽卫生巾兰州代理商/笑爽卫生巾甘肃代理商/维达卫生纸兰州代理商/选择指南 - 优质品牌商家
  • 初识类和对象
  • 手写ReACT LLM Agent:Python从零实现可调试智能体
  • PHP和TensorFlow集成实现深度学习和人工智能处理
  • 从芯片到产品:拆解一个RTL8153 USB网卡,聊聊硬件选型与供应链那些事儿
  • 以太网安全基础
  • 多维聚合不是GROUP BY:OLAP立方体建模与四大Manipulation操作
  • 2026甘肃镀锌板风管厂家评测:甘肃不锈钢风管加工、甘肃中央空调安装、甘肃中央空调工程、甘肃中空调设备公司、甘肃人防工程选择指南 - 优质品牌商家
  • 本地闭环流处理技术,实现军营高保密等级视频孪生应用
  • 2026年常州遗产继承纠纷律师避坑指南:5位专业靠谱律师推荐,陈志豪15年经验护航 - 本地品牌推荐
  • 终极网页视频下载指南:Cat-Catch资源嗅探工具如何轻松捕获在线视频
  • PHP预测算法原理、常用类型与实际应用详解
  • STM32F407串口接收避坑指南:DMA+空闲中断处理不定长数据的3个常见错误
  • 北京虫草名酒变现指南!盘点茅台回收变现靠谱的价格高店铺 - 资讯纵览
  • 【院士支持,快见刊】第四届食品科学与生物医药国际学术会议(ICFSB 2026)
  • GPT-4参数量与激活率真相:1.8万亿不是显存占用,2%不是固定比例
  • 用STorM32 GUI和Data Display窗口,像调试软件一样调校你的三轴云台PID
  • 2026甘肃软化水处理设备厂家实力排行及适配解析:甘肃瓶装水生产设备/甘肃瓶装水设备/甘肃生产瓶装水矿泉水设备/选择指南 - 优质品牌商家