基于Java的简易表达式解析工具(一)
最近需要用到相关表达式解析的工具,然后去网上搜索,找到了一个用C#写的表达式解析工具,仔细看了功能后发现,这正是我需要的,如果我能将它改造成基于Java语言的方式,岂不是更好吗,所以花了一段时间,把网上的C#的代码转换成了Java的代码,如今已经用它处理完美的处理一些表达式解析的工作。
先来看下这个基于Java的表达式解析工具都可以做些什么吧!
1、可以完成加、减、乘、除、取余、次幂的运算解析。
2、可以完成按位与、按位或、逻辑与、逻辑或、逻辑非的运算解析。
3、可以完成相等、不相等、大于、小于、大于等于、小于等于、左移位,右移位的运算解析。
4、可以完成包含、不包含、已什么开始、已什么结束运算解析。
我相信,这些基础的功能,完全可以满足大部分的需求了,而这个工具仅仅只有5个类完成(ExpressionEvaluator,ExpressionException,ExpressionNode,ExpressionNodeType,ExpressionParser)。
如果想要开发新的表达式解析规则,也是很容易的,完全可以把我们在Java里使用的一些函数和功能,通过定义一种表达式输入规则,配置到代码中,完成表达式解析的工作。关于表达式解析的算法,主要采用了逆波兰表达式。
先来看看用法吧:
例子1:
- public class Test2 {
- public static void main(String[] args){
- //加法运算
- String plusStr = "1 + 2";
- System.out.println(ExpressionEvaluator.eval(plusStr));
- //减法运算
- String subtractStr = "20 - 6";
- System.out.println(ExpressionEvaluator.eval(subtractStr));
- //乘法运算
- String multiPlyStr = "3 * 5";
- System.out.println(ExpressionEvaluator.eval(multiPlyStr));
- //除法运算
- String divideStr = "20 / 4";
- System.out.println(ExpressionEvaluator.eval(divideStr));
- //次幂运算
- String powerStr = "2 ^ 3";
- System.out.println(ExpressionEvaluator.eval(powerStr));
- //取余运算
- String modStr = "4 % 3";
- System.out.println(ExpressionEvaluator.eval(modStr));
- //混合运算
- String resultStr = "(1 + 2) - 4 * 3 + 2^2 + 4%3";
- System.out.println(ExpressionEvaluator.eval(resultStr));
- }
- }
输出结果如下:
3.0
14.0
15.0
5.0
8.0
1.0
-4.0
例子2:
- public class Test2 {
- public static void main(String[] args){
- String s1 = "(1 + 2) == 3";
- System.out.println(ExpressionEvaluator.eval(s1));
- String s2 = "(20 - 6) < 3";
- System.out.println(ExpressionEvaluator.eval(s2));
- String s3 = "(3 + 1) == 4 && 5 > (2 + 3)";
- System.out.println(ExpressionEvaluator.eval(s3));
- String s4 = "\"hello\" == \"hello\" && 3 != 4";
- System.out.println(ExpressionEvaluator.eval(s4));
- String s5 = "\"helloworld\" @ \"hello\" && \"helloworld\" !@ \"word\" ";
- System.out.println(ExpressionEvaluator.eval(s5));
- }
- }
输出结果如下:
true
false
false
true
true
而在实际使用的过程中,通常需要在界面上配置,配置的时候可能是如下的样子:
【字段一】包含 “helloword” 并且 【字段二】 不等于 “hello"
当这个表达式在使用的时候,通常需要有一步转换的工作,在调用表达式解析的时候,首先需要把在前台定义好一种解析的格式规则,然后前台用户根据规则输入的合法的表达式,到后台时首先转换成表达式解析能识别的格式,然后在交给表达式解析工作解析。
这个基于Java的表达式解析工具很简单,也非常容易根据自己的需求进行扩展,关于相关的代码,会在以后的博文中会共享出来。
基于Java的简易表达式解析工具(一)的更多相关文章
- 基于Java的简易表达式解析工具(二)
之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...
- java后台常用json解析工具问题小结
若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...
- 基于Java的四大开源测试工具
摘要:成功的应用程序离不开测试人员和QA团队反复地测试,应用程序在进行最后的部署之前,需要通过测试来确保它的负载管理能力以及在特殊情况下的工作条件和工作加载情况. %R[)vA t]N0 测试是应用程 ...
- 你必须掌握的Java基础:JSON解析工具-json-lib
一.简介 json-lib是一个Java类库,提供将Java对象,包括beans,maps,collections,java arrays和xml等转换成JSON,或者反向转换的功能. 二.准备 在 ...
- JSON语言规范与Java中两种解析工具基本使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html 一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...
- Java爬虫利器HTML解析工具-Jsoup
Jsoup简介 Java爬虫解析HTML文档的工具有:htmlparser, Jsoup.本文将会详细介绍Jsoup的使用方法,10分钟搞定Java爬虫HTML解析. Jsoup可以直接解析某个URL ...
- Java数学表示式解析工具- jeval
这个包能够为我们提高高效的数学表达式计算. 举个样例:这个是我们策划给出的游戏命中率的一部份计算公式 是否命中=a命中率 – (b等级 – a等级) * (命中系数(6)* b闪避率 / 100)+3 ...
- java 之 xml 之解析工具jaxp
一.jaxp的api查看 *jaxp是javase一部分 *jaxp解析器在jdk的javax.xml.parsers包里面 *共四个类:分别针对dom和sax解析使用的类 *dom解析类: Docu ...
- 基于java的简易计算器实现
方法: 1.将string类型的表达式输入转换成后缀表达式 2.计算后缀表达式 步骤一:将string类型的表达式输入转换成后缀表达式 输入字符串表达式,并将表达式转换成char型数组 String ...
随机推荐
- EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf
Java中实现分布式的方式有:EJB.RMI.XMLRPC.Web Service.Hessian.Thrift .Protobuf.NIO(Netty.Mina) EJB 优势:可扩展性好,安全性强 ...
- AndroidPn源码分析(二)
接上篇: (一)客户端与服务器建立连接 上一篇写到ClientSession createClientSession这里,创建一个客户端的session.在SessionManager类中创建了ses ...
- 关于CI/CD/CD (Continuous Integration/Continuous Delivery/Continuous Deployment)
Continuous Integration (CI) Continuous integration (CI) is the process that ensures the stability of ...
- LoadRunner 12下载和安装教程
我们利用LoadRunner可以对Web应用系统进行性能压力测试,本篇博客将和大家介绍下LoadRunner 12的下载和安装,在后续的博客中将和大家介绍其使用的方法. 1.LoadRunner 12 ...
- 关于ORACLE的字符窜存储(未完善,欢迎补充)
oracle中常见的用于存储字符串的数据类型有: 数据类型 是否定长 最多存储数 效率排行 备注 是否oracle特有 英文占位 中文占位 char 是 2000 比VARCHAR2稍高 char的长 ...
- wpf控件拖动
Thumb 拖动 上代码! <Window x:Class="Thumb控件移动.MainWindow" xmlns="http://schemas.microso ...
- FastAdmin 前端页面传参
如果我们需要自己在控制器中透传数据到JS中去,则可以使用控制器的assignconfig方法来透传,使用如下 $this->assignconfig('demo', ['name'=>'名 ...
- ThinkPHP5.0手把手实现手机阿里云短信验证
阿里云短信服务介绍阿里云短信服务就是以前的阿里大于,不过现在融合得到阿里云平台了.首先,你需要注册一个阿里云账号,这个自行解决. 仅用于测试使用官方送的代金券够用了.相关配置1.开通阿里云Access ...
- Spark MLlib中的OneHot哑变量实践
在机器学习中,线性回归和逻辑回归算是最基础入门的算法,很多书籍都把他们作为第一个入门算法进行介绍.除了本身的公式之外,逻辑回归和线性回归还有一些必须要了解的内容.一个很常用的知识点就是虚拟变量(也叫做 ...
- win7下oracle的安装
1.参考地址1:http://www.cnblogs.com/libiao/archive/2008/08/24/1275000.html 2.参考地址2:http://www.server110.c ...