一种基于 JEP 和可配置公式实现用户自定义字段的解决方案

一、 简介

A: 介绍

  1. JEP(Java Expression Parser)

  2. 用于解析和计算表达式,核心功能就是计算公式的解析和结果的计算。

  3. 在JEP 2.4.1版本之前未符合GPLv3 协议的免费开源包。

  4. JEP 支持用户自定义函数、常量、变量,在JEP中已经包含了大量可使用的通用数学公式和常量,可以满足绝大多数的数学计算需求

  5. 官方地址: http://www.singularsys.com/jep/,在官网上可以下载使用版本和相关文档

  6. 或使用Maven 添加依赖

     <!-- https://mvnrepository.com/artifact/jep/jep --><dependency><groupId>jep</groupId><artifactId>jep</artifactId><version>2.24</version></dependency>
    
  7. JEP特性:

    1. 文件小巧(jar包在300K以下)
    2. 快速计算
    3. 求值精度高,在计算过程中使用BigDecimal
    4. 已经内含了常用的数学函数和运算符
    5. 支持布尔型表达式
    6. 具有良好的可扩展性和可配置性
    7. 支持字符串、向量、复杂数值
    8. 支持隐式乘法
    9. 允许声明或者未声明的变量
    10. 最低兼容Java1.5
    11. 支持Unicode字符
    12. 有大量的参考文档
    13. 包含JavaCC语法分析生成器可自动生成main class

B: 实例

  1. JEP 对一个表达式的计算包含两个步骤

    1. JEP 首先会对表达式进行解析,解析后会生成一个树形结构,接下来会基于这个树形结构进行快速求值

      1. 从上图的工作流程可以看出,JEP的工作流程非常简单。 实例:

         /*** String expression = "(x+y)*n/z";* @desc 简单实例*/private static void demo1(String expression) {JEP jep = new JEP();try {// 设置表达式中变量的值jep.addVariable("x", 1);jep.addVariable("y", 100);jep.addVariable("n", 100);jep.addVariable("z", 2);// 载入并解析表达式jep.parseExpression(expression);// 获取计算结果double value = jep.getValue();// 输出结果String result = new String(expression);result = result.replace("x", "1");result = result.replace("y", "100");result = result.replace("n", "100");result = result.replace("z", "2");result += "=" + value;System.out.println("计算结果 --> " + result);} catch (Exception e) {e.printStackTrace();}}输出结果: 计算结果 --> (1+100)*100/2=5050.0
        

二、 整体设计说明

  1. JEP 的整体设计

    1. 在JEP 的设计方案中 , JEP 提供了一套用于对数学表达式解析和计算的类库 , 可以对用户配置的计算公式进行解析 , 并且快速求值。 通过将计算公式设计拥有将用户隔离、配置化管理以及运行时载入三个特性,我们可以对同一字段针对不同的用户配置不同的计算公式。

A:JEP

  1. JEP为整个功能设计的核心,主要对公式进行读取和解析,并为计算中遇到的变量进行赋值,并且计算结果

B: 可配置化公式

  1. 按用户隔离

    1. 每一个用户都使用独立文件存放计算公式,用户之间不会相互干扰,实现用户公式的个性化配置。
  2. 配置化管理
    1. 提供修改功能,保持程序的灵活性和可扩展性。在新增自定义字段或者改变计算公式时,无需修改代码,只需要重新对计算公式进行配置即可。
  3. 运行时载入
    1. 修改配置后,无需重启应用,也可将配置的公式载入运行时的系统中
    2. 在系统启动时会读取配置文件,在系统运行过程中,提供对用户的自定义公式的再配置功能并重新加载,在无需重启服务器的情况下让新配置的公式生效

三、 总结

  1. 本文对第三方Java类库JEP做了一个简单的入门介绍。

一种基于 JEP 和可配置公式实现用户自定义字段的解决方案相关推荐

  1. fpga map测试_一种基于SELECTMAP的可配置且高速的FPGA配置电路及实现方法与流程

    本发明属于计算机工程领域,与SoC密切相关.具体涉及一种FPGA配置电路及实现方法. 背景技术: 随着大数据的发展,计算能力的提升,人工智能近两年迎来了新一轮的爆发.2016年谷歌AlphaGo赢得了 ...

  2. 【文献翻译】MDC-Checker:一种新的多域配置网络风险评估框架

    摘要 在满足实际需求的同时,生成正确的网络配置以最小化攻击面是一项具有挑战性的任务,特别是当考虑到分散在物理.网络和信息领域的配置之间的相互依赖关系时.由于不同域中的配置通常是单独生成的,而它们之间的 ...

  3. 复化柯特斯matlab,基于牛顿‑柯特斯公式构造背景值的GM(1,1)模型预测方法与流程...

    本发明涉及数据预测技术领域,具体涉及一种基于牛顿-柯特斯公式构造背景值的GM(1,1)模型预测方法. 背景技术: 货物周转量预测方法较多,其中较为常见的方法有:时间序列法.BP神经网络.回归分析法.灰 ...

  4. html下拉菜单读取xml,基于XML的可配置Html下拉框的设计与实现

    (江西制造职业技术学院信息工程系,江西 南昌 330000) 摘 要:专门针对Web下拉框控件影响网页性能.不利于美工和维护等问题,通过比较Web下拉框与Html下拉框各自的利弊,提出一种基于XML实 ...

  5. 极坐标梯度公式_一种基于极坐标系梯度变化的类圆环边缘检测方法与流程

    本发明涉及图形处理技术领域,具体地说是一种基于极坐标系梯度变化的类圆环边缘检测方法. 背景技术: 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中 ...

  6. 基于信息熵确立权重的topsis法_一种基于改进多目标粒子群算法的受端电网储能优化配置方法与流程...

    本发明涉及受端电网中储能的规划问题,具体涉及一种基于改进多目标粒子群算法的受端电网储能优化配置方法. 背景技术: 随着煤炭等非可再生.高污染的能源总量日益减少,我国的电能结构正由火力发电向低碳化的清洁 ...

  7. raid配置ssd为缓存_一种基于SSDRAID阵列的多级缓存及缓存方法与流程

    本发明属于固态硬盘存储技术领域,更具体地,涉及一种基于SSD RAID阵列的多级缓存及缓存方法. 背景技术: 基于闪存的固态磁盘(Solid State Drives,SSD)以其优异的性能.非异失和 ...

  8. 心电图计算心率公式_一种基于心电信号的心率计算方法与流程

    本发明涉及医学电子信息领域,具体涉及一种基于心电信号的心率计算方法. 背景技术: 心电图是临床最常用的检查之一,应用广泛,包括帮助诊断心律失常.心肌缺血.心肌梗死等.心电图记录的是随心动周期变化的体表 ...

  9. matlab中枝切法解包裹,一种基于改进枝切法的激光散斑相位解包裹方法与流程

    本发明属于激光散斑干涉测量领域,涉及一种激光散斑相位解包裹方法. 背景技术: 散斑干涉相位图解包裹是激光散斑测量的关键步骤,Goldstein枝切法解包裹算法由于可识别残差点,防止误差传递,解缠精度高 ...

  10. matlab计算潮差程序,一种基于FVCOM模型的可视化潮汐潮流预报方法与流程

    本发明涉及潮汐预报技术领域,特别是涉及一种基于FVCOM模型的可视化潮汐潮流预报方法. 背景技术: 潮汐预报对一定海区在未来一定时间内的潮汐涨落情况进行的推算和预报.预报内容包括逐日的高潮和低潮高度及 ...

最新文章

  1. shell中常用系统变量和条件判断
  2. 高等数学:第三章 微分中值定理与导数的应用(3)曲线的凹凸 拐点 曲率
  3. 在windows 2008 R2上安装sharepoint 2013时遇到提示必须安装 .netframeword4.5的处理办法...
  4. 【kerberos】kerberos 认证 详情介绍
  5. 比尔·盖茨承认犯下 4000 亿美元大错:误给 Google 推出 Android 机会!
  6. 类型配置命名空间 —— XML schema
  7. python怎么使用-如何使用python进行第一个机器学习项目(详细教程篇)
  8. linux 下配置jdk
  9. iOSQuartz2D-04-手动剪裁图片并保存到相册
  10. linux里终端安转视频播放器的操作及显示
  11. 入行网络工程师一年的心得体会
  12. win7系统关闭445端口
  13. 推荐系统中常用算法以及优点缺点对比
  14. 如何用python爬取图片数据_python爬虫怎么实现爬取网站图片?
  15. BouncyCastle配置
  16. 易语言程序c0000005,教你四招彻底解决易语言程序误报问题
  17. 儒家思想的核心:仁、义、礼、智、信、忠、孝、悌、节、恕、勇、让
  18. Matlab:Matlab编程语言应用之三维绘图可视化(基础知识点基本函)的使用方法简介、案例实现(三维曲线图机械阻尼振动三维等高线图等案例)之详细攻略
  19. OkHttp全解析(一)——基本概念与使用方法
  20. 为什么TDM更适合数字传输?(模拟信号与数字信号传输比较,TDM与FDM传输方式比较)

热门文章

  1. 华为NP课程笔记2-OSPF2
  2. 联想Y9000P安装Ubuntu20.04记录
  3. 小学计算机基础知识思维导图,思维导图在小学信息技术教学中的初步应用
  4. 日常生活中的思维导图:一本书让你了解思维导图MindManager
  5. Linux下SVN客户端使用教程(全)
  6. HTML5查看CAD图纸,看cad图纸软件(DwgSee)怎么打印Cad图纸?
  7. 2018美赛E题所有国家气候数据
  8. 好程序员Python培训分享numpy简介
  9. 阿里巴巴字体库的下载以及三种用法
  10. 2022年全国大学生电子设计大赛省赛A题