Java实现表达式解析--初始篇

来源:互联网 发布:网络直播评论性文章 编辑:程序博客网 时间:2024/06/05 06:21

1、首先,需要一个expression.jar。
注意,这个jar包并不是javax.el.expression之类的等等,我反正是在maven网上资源中没有搜索到,个人之前网页下载了一个jar包,结构如下,我会将其上传到个人资源中,有需要的朋友可以自行下载。
这里写图片描述
为什么必须要这个jar包,因为不同的表达式解析jar包自己有不同的方法,本文讲述的即是这个jar包的使用。
2、建立一个自己的工程
步骤略。
3、解析过程介绍
表达式解析的目的:当然是为了通用了。一个项目设计到的一些计算公式如果写死的话可扩展性就会随之大大降低,可能公式的改动和数据格式的变动都会影响到整个项目,开发人员再去底层修改对应的公式就会很麻烦(毕竟最初开发人员不可能一直跟着项目)。所以为了避免后期改动代码,对于有计算公式的项目最后设计成可配置型的。可配置包括界面配置和配置文件(….扯远了,跳过)。
表达式解析的结果:当然是计算表达式了- -,就像普通的a+b;表达式一样,在给a,b赋值后返回的就是结果值了,当然也有boolean型的表达式,如1==0;、2>1;等等。
表达式解析具体函数:
表达式对象实例化:

ExpressionFactory factory = ExpressionFactory.getInstance();        Expression expression = factory.getExpression(expr);//expr为表达式
表达式执行:
Valuable valuable = expression.evaluate();        System.out.println(valuable.getValue().toString());

以上只是一个小小的demo,实际使用的时候表达式肯定会复杂的多,表达式中也不仅仅是值与值的计算,也会存在着些许变量,也会有一些函数。对于变量的获取和赋值如下:

ExpressionFactory factory = ExpressionFactory.getInstance();Expression expr = factory.getExpression(expression);Set<String> fieldSet = expr.getVariableNames();for (String fieldName : fieldSet) {    //如果该变量还没有被赋值   if (null == expr.getVariableValue(fieldName)) {       String fvalue="1111";//可以在此处获取变量值进行赋予       expr.setVariableValue(fieldName, fvalue);    }}

4、简单的测试案例

import java.util.Set;import neu.sxc.expression.Expression;import neu.sxc.expression.ExpressionFactory;import neu.sxc.expression.tokens.Valuable;public class Test1 {    public static void main(String[] args) {        ExpressionFactory factory = ExpressionFactory.getInstance();        Expression expr = factory.getExpression("a+b+c+d;");        Set<String> fieldSet = expr.getVariableNames();        for (String fieldName : fieldSet) {            if (null == expr.getVariableValue(fieldName)) {                int fvalue = 2;                expr.setVariableValue(fieldName, fvalue);            }        }        Valuable valuable = expr.evaluate();        System.out.println(valuable.getValue().toString());    }}

输出结果为:8。
需要注意的几点:
1)表达式要以分号(;)结尾
2)变量的赋值要对应,比如要进行算数运算,要赋予变量算术类型的值,要进行字符串运算,要赋予变量字符型的值。否则会出错。

以上只是关于Java表达式的基础之基础,后续我会针对表达式如何配置以及表达式中的函数(系统自带函数和自定义函数)进行详细的讲解。

原创粉丝点击