JEP:Java表达式分析器

article/2025/10/3 19:26:33
JEP 是一个用于解析和计算数学表达式的 Java 类库。通过使用这个包你可以把公式看
作字符串并快速计算它们。其中内置了大量公共的数学函数和常量供用户使用。另外,你也
可以通过自定义变量、常量、函数等方式扩展 JEP
使用 JEP 计算一个字符串表达式包括两个步骤,如下图所示。首先是解析表达式,从
字符串结构解析为树形结构。表达式的树形结构表示允许接下来的简单、快速的表达式计算。

文档:Jep说明文档_jep,javajep-Java文档类资源-CSDN下载

测试代码:

        <!-- jep java表达式分析器 --><dependency><groupId>com.singularsys</groupId><artifactId>jep</artifactId><version>3.5</version><classifier>trial</classifier></dependency>
import com.singularsys.jep.PostfixMathCommandI;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author lihai* Create Date: 2021-11-20*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JepFunctionPo {private String name;private PostfixMathCommandI function;
}
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.qms.ipqc.common.po.JepFunctionPo;
import com.quality.common.exception.DangerException;
import com.quality.common.exception.GeneralException;
import com.singularsys.jep.Jep;
import com.singularsys.jep.JepException;
import com.singularsys.jep.Variable;
import com.singularsys.jep.VariableTable;
import com.singularsys.jep.bigdecimal.BigDecComponents;
import com.singularsys.jep.functions.*;import java.math.BigDecimal;
import java.math.MathContext;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;/*** @author lihai* Create Date: 2021-11-20*/
public class JepAnalysisUtil {public static List<JepFunctionPo> getDefaultJepFunctionPoList() {return Arrays.asList(
//                new JepFunctionPo("round", new Round()),
//                new JepFunctionPo("rint", new RInt()),
//                new JepFunctionPo("floor", new Floor()),
//                new JepFunctionPo("ceil", new Ceil()),
//                new JepFunctionPo("abs", new Abs()),new JepFunctionPo("sqrt", new SquareRoot()),new JepFunctionPo("SQRT", new SquareRoot()));}public static Jep newJep(List<JepFunctionPo> functions) {Jep jep = new Jep(new BigDecComponents(MathContext.DECIMAL128));if (ObjectUtil.isNotEmpty(functions)) {functions.forEach(function -> jep.addFunction(function.getName(), function.getFunction()));}return jep;}public static Jep parse(String expression) {Jep jep = newJep(getDefaultJepFunctionPoList());try {jep.parse(expression);return jep;} catch (Exception e) {throw new DangerException("JEP解析表达式失败:" + expression + ",请检查表达式是否合法!");}}public static BigDecimal analysis(String expression, Map<String, Object> variables) {Jep jep = parse(expression);try {if (ObjectUtil.isNotEmpty(variables)) {variables.forEach((k, v) -> {try {jep.addVariable(k, NumberUtil.parseNumber(v.toString()));} catch (JepException e) {throw new DangerException("JEP赋值异常:" + e.getMessage());}});}return new BigDecimal(jep.evaluate().toString());} catch (JepException e) {throw new GeneralException("JEP计算异常:" + e.getMessage());}}public static Set<String> getVariables(String expression) {Jep jep = parse(expression);try {final VariableTable variableTable = jep.getVariableTable();final List<Variable> variables = new ArrayList<>(variableTable.getVariables());return variables.stream().filter(var -> var.getValue() == null).map(Variable::getName).collect(Collectors.toSet());} catch (Exception e) {throw new DangerException("获取JEP变量失败:" + expression);}}public static void checkExpressionVariables(String expression, Set<String> variables) {final Set<String> expressionVariables = getVariables(expression);for (String var : expressionVariables) {if (!variables.contains(var)) {throw new DangerException(String.format("表达式:%s 缺少变量:%s", expression, var));}}}}

测试方法:

    @Testvoid jepAnalysis() {String expression = "sqrt(a-b+c*d/e)";Map<String, Object> params = new HashMap<String, Object>() {{put("a", 5);put("b", 1);put("c", 3);put("d", 2);put("e", 2);}};final BigDecimal analysis = JepAnalysisUtil.analysis(expression, params);System.out.println("计算结果:" + analysis);}


http://chatgpt.dhexx.cn/article/GoecboPJ.shtml

相关文章

java 使用JEP 进行节点计算

2.X 存在精确度问题 推荐使用3.X 参考文章: java 使用 jep3.5 解析公式自动计算(包含BigDecimal模式 浮点数精准计算)​​​​​​​ 1.JEP基础相关 请参考: java 使用JEP解析字符串计算公式 求值(附带自定义函数编写) 2.使用节点计算 注释写的很明白 要仔细看 public st…

如何在Java中执行Python模块?从认识JEP库开始

让我们从认识JEP库开始。 关注《Java学研大本营》 本教程基于带M1芯片的macOSX&#xff0c;用于Python 3.8/3.9和Java 11。 介绍 从我的实践来讲&#xff0c;我遇到的上一个挑战是&#xff0c;当基础应用引擎是Java的时候&#xff0c;我按常理应该添加一个新的机器学习功能。…

JEP 290 初识

JEP 290 初识 全局过滤器自定义过滤器内置过滤器 JEP 290是 oracle提供已一套JAVA反序列化机制&#xff0c;其并不是一种必须被强制执行的策略&#xff0c;而是需要程序员或者运维人员进行开发与启用。关于该机制的优缺点借用老外的一篇文章 https://dzone.com/articles/a-firs…

jep 使用方法与简介

1什么是jep JEP是Java expression parser的简称&#xff0c;即java表达式分析器&#xff0c;Jep是一个用来转换和计算数学表达式的java库。通过这个程序包&#xff0c;用户可以以字符串的形式输入一个、任意的公式&#xff0c;然后快速地计算出结果。Jep支持用户自定义变量、常…

那些人工智能明星公司都在搞什么?

事件&#xff1a;全球机器学习技术大会 时间&#xff1a;2021年1月13-14日 地点&#xff1a;金茂北京威斯汀大饭店 画外音&#xff1a;文末送所有PPT。 大会特邀近40位机器学习领域的技术领袖和行业应用专家&#xff0c;与1000来自电商、金融、汽车、智能制造、通信、工业互联网…

中国人工智能公司CIMCAI世界港航AI领军企业,自动化港口数字化码头,智能闸口各箱面箱况残缺检测视频流动态感知中国人工智能公司

中国人工智能公司CIMCAI世界港航AI领军企业&#xff0c;自动化港口数字化码头&#xff0c;智能闸口各箱面箱况残缺检测视频流动态感知&#xff0c;智能化港口码头数字化。CIMCAI已完成全球250万人工智能集装箱箱况检验&#xff0c;完成全球上亿集装箱信息&#xff0c;先进产品在…

外媒评选出来的中国五大人工智能(AI) 公司

https://www.toutiao.com/a6656628348795486727/ 2019-02-11 14:37:43 全球三分之二的人工智能投资正在进入中国市场&#xff0c;仅去年一年就帮助人工智能行业增长了67&#xff05;。 中国科技行业最近宣布了其前50家人工智能公司。其中包括14只“独角兽”--估值为10亿美元或…

【研究】那些人工智能公司现在发展到哪一步了?

作者&#xff1a;欧应刚 | 小编&#xff1a;小葱 近期&#xff0c;为了撰写《2018中国人工智能应用与生态研究报告》&#xff0c;中国软件网对我国人工智能产业应用和平台、生态建设进行了调研&#xff0c;以下是部分调研结果&#xff0c;更多内容见报告完整版。 1.已经有相当…

全球最强人工智能创新公司Top100榜单重磅发布!

自2012年至现在&#xff0c;名单上的100家跟人工智能相关的创业公司在367笔交易中累计融资总额达到117亿美元。以下是2017年的AI 100名单列表。 今天CB insights公布了第二个年度AI 100&#xff0c;即2018 AI 100 名单&#xff0c;如下图所示&#xff0c;这是其中100家最有希望…

2017-2020年人工智能公司死亡名单

▼ 更多精彩推荐&#xff0c;请关注我们 ▼ 有浪潮就有泡沫&#xff0c;有泡沫就有死亡。 被称为继移动互联网之后又一次个重要技术爆炸的人工智能&#xff0c;从者如云。从2017年以来&#xff0c;又有多少人工智能公司在浪潮中诞生&#xff0c;又有多少公司在浪潮中死亡&#…

AI公司--国外知名公司

微软、Facebook、IBM、迪士尼、亚马逊、Adobe 波士顿动力 波士顿动力成立于1992年&#xff0c;当时属于麻省理工学院&#xff0c;后被Alphabet收购。去年&#xff0c;软银从Alphabet手中收购了波士顿动力公司。软银通过自己的愿景基金&#xff0c;在机器人领域进行了大量投资。…

在国内人工智能领域,你最看好哪一家公司?

在人工智能的各个细分领域&#xff0c;除了微软、google、BAT这样的巨头&#xff0c;还有许多世界领先、拥有各自黑科技的中国企业&#xff0c;它们之中&#xff0c;有些正在成长为独角兽&#xff0c;有些已经成为了投资者的关注对象。 语音之王&#xff1a;科大讯飞 黑科技&…

一图看清美国最具前景的50家人工智能公司

近期&#xff0c;福布斯&#xff08;Fobes&#xff09;杂志与Meritech Capital合作发布了美国最具前景的50家人工智能公司榜单。榜单中的公司均为非上市创业公司&#xff0c;累计融资68亿美元&#xff0c;总估值达到267亿美元。 从业务领域来看&#xff0c;上述50家公司主要分布…

欧洲估值最高的5家人工智能创业公司

来源&#xff1a;资本实验室 今年初&#xff0c;据伦敦风险投资公司MMC的调查&#xff0c;四成自称为人工智能公司的欧洲创业公司实际上并未在核心业务中涉及到人工智能&#xff0c;人工智能仅为吸引投资的漂亮外衣。 这一数据发布后&#xff0c;激起了轩然大波&#xff0c;不仅…

『科技』2019全球最有前景AI公司TOP100|湾区人工智能

来源:eet-china I,人工智能学家 整理&#xff1a;弗锐达 引言&#xff1a;硅谷最强智库之一的CB Insights发布AI 100 2019报告&#xff0c;在全球范围内评选出了100家“最有前景”的AI创业公司&#xff0c;其中中国公司有6家&#xff0c;分别是…… 日前&#xff0c;硅谷最强智…

人工智能商业应用,并介绍详细公司案列

目录 1. 推荐系统&#xff1a;2. 智能广告和营销&#xff1a;3. 聊天机器人和虚拟助手&#xff1a;4. 自动化和机器人化&#xff1a;5. 数据分析和预测&#xff1a;6. 机器视觉和图像识别&#xff1a;7. 金融科技&#xff08;FinTech&#xff09;&#xff1a;8. 医疗诊断和健康…

人工智能公司排名

人工智能为远程教育的智能化提供了有力的技术支撑。格物斯坦认为&#xff1a;通过运用专家系统、自然语言处理、人工神经网络、机器学习等技术&#xff0c;跟踪学习者的思维路径及其解决问题的潜在目标结构&#xff0c;诊断和评估学习者的理解域&#xff0c;对学习者提供及时的…

【人工智能】AI 公司:DeepMind 公司传

人工智能公司:DeepMind 公司传 文章目录 人工智能公司:DeepMind 公司传一、创立初期1.1 创始人背景二、细分领域与研究突破2.1 DQN(Deep Q-Network)2.2 AlphaGo2.3 StarCraft II三、与谷歌的合作及收购3.1 数据中心节能3.2 AI助手和自然语言处理四、致力于应用和道德4.1 应…

人工智能企业全球一百强,中国6家上榜,5家在北京

https://www.toutiao.com/a6702387319824974339/ 数据显示&#xff0c;截至2018年&#xff0c;北京人工智能企业数达到1070家&#xff0c;占全国人工智能企业数超过四分之一&#xff1b;人工智能企业全球一百强中&#xff0c;我国有6家&#xff0c;5家在北京。我国人工智能领域…

高等数学(同济第七版上)课后习题及解答

高等数学(同济第七版)课后答案解析答案&#xff0c;部分截图如下 太多了&#xff0c;就不在一一复制&#xff0c;可以扫描下方二维码&#xff0c;关注微信公众“数据结构和算法”&#xff0c;回复高等数学的拼音简称gdsx即可获得下载地址