1 、工具介绍

String exp = “v>=10&&v<=2000&&v%10==0”;

在 js 中,能够直接运行 eval 得到结果, java 中也可以!

在 java 中运行执行这种字符串格式数学表达式的方法:

1、 自己写按照算法(逆波兰)一个解析程序。

2、 使用第三方的工具。

1.jakarta commons JEXL. : Apache 出品,必属精品。

2.Beanshell :动态语言,能够很好与 spring 集成。

3.Java Math Expression Parser jep

4.parse combinator jparsec

5.JFormula:http://www.japisoft.com/formula/

6.jeval:http://www.javagg.com/diary/67916522

7.jdk 6.0 的 script : java 中比较著名的 js 引擎 -mozilla 开源的 rhino ,通过动态语言的 eval 实现。

8.IK Expression :官方介绍: IK Expression 是一个开源的( OpenSource) ,可扩展的( Extensible ),基于 java 语言开发的一个超轻量级( Super lightweight )的公式化语言解析执行工具包。严重推荐 :文档很全,易用,如果有不懂的地方,可以直接去作者的 blog 用中文交流。 http://code.google.com/p/ik-expression/

协议: GNU

8.MVEL : 很好用,极为简单 ,和 BeanShell 一样有自己的交互式环境: MVEL Shell 。

使用教程:

http://mvel.codehaus.org/Integration+Guide+for+2.0

http://mvel.codehaus.org/Getting+Started+for+2.0

语法环境:

http://mvel.codehaus.org/Language+Guide+for+2.0

模板:

http://mvel.codehaus.org/MVEL+2.0+Templating+Guide

能够像 freemarker 、 velocity 一样工作,虽然不专业功能也够用了。

更新:

现在MVEL已经用到了google的MVC框架sitebricks中了,其中MVEL在sitebricks中地位类似ognl之于webwork。

sitebricks 见http://code.google.com/p/google-sitebricks/

协议: Apache 2.0 License

DEMO: ( IK Expression vs MVEL ):

IK Expression:

// 定义表达式 String expression = "v>=10&&v<=2000&&v%10==0" ; // 给表达式中的变量 [ v ] 付上下文的值 Listvariables = new ArrayList(); variables.add(Variable. createVariable ( "v" , new Integer(10)); // 预编译表达式 PreparedExpression pe = ExpressionEvaluator. preparedCompile (expression, variables) // 执行表达式 Boolean result = (Boolean) pe.execute(); System. out .println( "Result = " + result.booleanValue()); // Result = true // 更改参数,再次执行预编译式 pe.setArgument( "v" , new Integer(11)); result = (Boolean) pe.execute(); System. out .println( "Result = " + result.booleanValue());// Result = false

MVEL :

//定义表达式 String expression = "v>=10&&v<=2000&&v%10==0"; Map vars = new HashMap();//参数环境表 // 给表达式中的变量 [ v ]赋值 vars.put("v", new Integer(10)); // 执行表达式,返回结果 Boolean result = (Boolean) MVEL.eval(expression, vars); System. out .println( "Result = " + result.booleanValue());// Result = true // 更改参数,再次执行预编译式 vars.put("v", new Integer(10)); result = (Boolean) MVEL.eval(expression, vars); System. out .println( "Result = " + result.booleanValue());// Result = false

2、 应用场景

通过数学公式的形式,

1、 适用于常规业务系统条件的动态配置。

2、 工作流的流程配置

java执行数学表达式_数学表达式解析-JAVA版相关推荐

  1. java课后习题七解析_《Java基础入门》_课后习题解析.doc

    <Java基础入门>_课后习题解析 <Java基础入门>课后习题 Java开发入门 一.填空题 1.Java的三大体系分别是_JavaSE_____._JavaEE_____. ...

  2. 2019年浙江高考数学选择试题答案及解析-(word版)

    本文作者:vxbomath 老师今天给大家提供2019年浙江高考数学试题答案及解析-(word版) 并含有详细的答案解析. 推荐阅读:高中数学辅导之高考数学射影定理秒杀三角函数难题(视频) [学渣逆袭 ...

  3. 解析java源代码_一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  4. 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...

    我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么? welcome.java: import javax.swing.*; public class w ...

  5. 表达式_关系式_关系表达式_比较表达式

    文章目录 表达式说明 比较表达式的结果 表达式说明 "关系表达式",简称"关系式","比较关系表达式",简称"比较关系式" ...

  6. java执行python脚本_使用Runtime.getRuntime().exec()在java中调用python脚本

    举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...

  7. java 执行ssis包_在SSIS包中使用CHECKPOINT重新启动包执行

    java 执行ssis包 In the article, SQL Server CHECKPOINT, Lazy Writer, Eager Writer and Dirty Pages in SQL ...

  8. java 执行oracle命令_利用oracle存储过程执行操作系统命令

    以下方法在WINNT,LINUX下的oracle9i上测试通过,java过程调用系统命令 首先给使用java存储过程的用户授予一定的权限 <>表示所有文件,也可以单独指定文件. r w e ...

  9. java执行python脚本_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

最新文章

  1. flash模拟EEROM
  2. SAP HUM 内向交货单凭证流和Relationship Browser
  3. linux服务端搭配win7客户端的frp
  4. 解决 idea 复制jsp 文件过来页面报404
  5. python编写一个函数判断一个数是否为素数是则返回yes_编写函数isPrime,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...
  6. vs资源视图加载失败
  7. TensorFlow 2.0 发布以来,又有哪些最新进展?| AI ProCon 2020
  8. java默认virtual_mac jdk配置(系统默认or自己配置)
  9. python mysql 循环语句怎么写_用于mysql语句的Python循环
  10. android系统签名一样不,解决Android应用签名和系统不一致的问题
  11. Unable to open debugger port (127.0.0.1:**): java.net.BindException Address already in use: JVM_Bind
  12. 这几款简单好用的录屏软件,快收藏起来
  13. Android studio MacBook快捷键
  14. 小程序模板网站平台_小程序模板平台哪个好
  15. 富勒x100滚轮无法调节音量怎么办?
  16. [转]Cortex-a8 arm11 arm9 xscale powerpc 嵌入式处理器实测性能
  17. python-opencv学习笔记(八):判断是否雾天与图像能见度测算
  18. 【Android】实现九宫格展示图片+视频(仿QQ空间、微信朋友圈)
  19. 全网最全的唐诗,让你了解唐诗。让你明白唐诗皎洁的月光洒到床前,迷离中疑是秋霜一片。仰头观看明月呵明月,低头乡思连翩呵连翩。国破山河在,城春草木深。感时花溅泪,恨别鸟惊心。烽火连三月,家书抵万金。白头搔
  20. python的基本原理_python基础1(理论基础)

热门文章

  1. Linux网络协议栈:网卡收包分析
  2. BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
  3. Linux iperf 网络传输性能测试工具
  4. ncurses鼠标事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()
  5. ncurses窗口机制:wprintw(), wrefresh()
  6. python八角图形绘制_(Python)从零开始,简单快速学机器仿人视觉Opencv—第四节:OpenCV处理鼠标事件...
  7. VUE3组合api的钩子函数生命周期
  8. Html之图片轮播(锚)
  9. Spring Data说明
  10. 应用发布服务器_Apache Tomcat 10.0.0-M1 发布,开源 Web 应用服务器