`

java求值字符串型逻辑表达式

    博客分类:
  • java
阅读更多
这是最近在项目中的一个需求,已知a=3,求字符串"a<=2"的值,也就是应该返回false。这个问题可大可小,就我们的应用场景也就是用来让用户自定义变量区间,比如类似下面这样的规则:
a<=2    返回积分系数1.0
2<=5  返回积分系数1.1
a>5     返回积分系数1.2
    如果用switch写死在代码中,以后要修改规则实在是很麻烦的事情,用户也希望能自己维护这样些区间值。于是我想就让用户自己输入这样的表达式和变量的值保存在数据库中,然后计算的时候由系统来解析表达式并求值。问题就归结到求值字符串型逻辑表达式。这个问题恰好是规则引擎的应用领域,可我们的系统已经上线蛮久了,从维护角度也不希望再引入新的开源工具,如果是算术表达式(比如2+3之类)可以直接扔进数据库执行即可,逻辑表达式倒是可以通过调用脚本语言来eval,但是同样是考虑后期维护问题,也不想引入beanshell、groovy的脚本语言。所以,我就自己写了个parser用于求值。
    基本原理就是维护两个栈:操作数栈和操作符号栈,解析和求值的过程就是入栈和出栈操作。我不知道怎么编辑代码了,有兴趣看看这个链接吧。http://www.blogjava.net/killme2008/archive/2007/08/06/134668.html
分享到:
评论
1 楼 dennis_zane 2007-08-06  
我不知道怎么编辑代码了@@

相关推荐

    java正则实现解析算术表达式 (仅限+-*/和括号)

    java正则实现解析算术表达式 (仅限+-*/和括号)

    表达式解析工具

    表达式解析工具。支持数字计算,字符串比较(日期按字符串处理,逻辑类型按TRUE FALSE比较)。

    python-17-正则表达式.zip

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这 些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一 种过滤逻辑(可以用来做检索,截取或者替换...

    JAVA正则表达式实例教程

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    Java开发技术大全(500个源代码).

    leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发...

    EL表达式的详细使用

    可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。 空 空操作符是前缀操作,可用于确定值是否为空。 条件型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 3、隐式对象 JSP 表达式语言...

    正则表达式匹配工具——主流的开发语言(C#、Java、C++、VB、Ruby以及Python等)

    这是一款正则匹配工具,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    22. 匹配由26个英文字母的大写组成的字符串 23 匹配由26个英文字母的小写组成的字符串 24 匹配由数字和26个英文字母组成的字符串; 25 匹配由数字、26个英文字母或者下划线组成的字符串; java源码: /* * Created ...

    常用正则表达式

    正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则...

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    JAVA面试大全(2018整理版)

    很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果...

    数据结构与算法,Java语言描述

    有对数据结构与算法的基本概念、线性表、栈与队列、串、数组与矩阵、树与二叉树、图的一些逻辑结构的介绍,以及如何用Java语言实现其各种各样的存储结构的代码,同时也会有一些相关的应用,比如后缀表达式求值、字符...

    微软JavaScript手册

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    EL表达式 (详解)

    4-- EL语言可显示 逻辑表达式如${true and false}结果是false 关系表达式如${5&gt;6} 结 果是false 算术表达式如 ${5+5} 结果是10 5--EL中的变量搜索范围是:page request session application 点运算符(.)和"[ ]...

    java初学者必看

    5.1.3 StringBuffer创建字符串 5.2 连接字符串 5.2.1 与字符串的连接 5.2.2 与其他数据类型的连接 5.3 String字符串操作 5.3.1 基本操作 5.3.2 比较 5.3.3 转化 5.3.4 查找 5.3.5 截取拆分 5.3.6 替换或...

    Java 1.6 API 中文 New

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...

    JAVA基础之java的移位运算

    因为你知道Java 在对表达式求值时,将自动把这些类型扩大为 int 型,而且,表达式的值也是int 型。对byte 和short类型的值进行移位运算的结果是int 型,而且如果左移不超过31位,原来对应各位的值也不会丢弃。但是,...

    java基础知识

    六 转义符 字符串长度加 双引号 就在 后边加 &quot; 如果要加 单引号 就在 后边加 &quot; 43 七 字符串常用的提取和查询的方法 43 八 练习: 44 Java知识点总结 48 一 布尔类型 48 二 强转 48 三 运算符: 49 1 ...

    java基础入门教程

    5 其 它 :使 用 Java 语 言 对 开 发 效 益 、 开 发 价 值 都 有 比 较明显 的 影 响 。 三 、 工 业 界 对 Java 语 言 的 评 价 1996年 5月 29 ~ 31日 ,在 美 国 旧 金 山 召 开 了 一 个 全 世 界 Java语言 ...

    java范例开发大全源代码

     实例102 算术表达式求值器 129  实例103 字符串对齐调整器 137  实例104 字符串的加密 139  实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符...

Global site tag (gtag.js) - Google Analytics