对于形如“(TYPE=SITA##)&&(((CTYP=FPL##)||(CTYP=CHG##)||(CTYP=CNL##)||(CTYP=DLA##)||(CTYP=DL##)||(CTYP=ED##))&&(ADEP=ZSSS##))”的字符串,常以某个事物的判定条件出现,要计算出整个条件最后的结果(true/false)。

  以下给出Java代码

 package com.test;

 import net.sourceforge.jeval.Evaluator;

 public class T1 {

     public static void main(String[] args) throws Exception {
String condition ="(TYPE=SITA##)&&(((CTYP=FPL##)||(CTYP=CHG##)||(CTYP=CNL##)||(CTYP=DLA##)||(CTYP=DL##)||(CTYP=ED##))&&(ADEP=ZSSS##))";
condition = replaceExpression(condition, "TYPE=", "SITA", "=");
condition = replaceExpression(condition, "CTYP=", "FPL", "=");
condition = replaceExpression(condition, "ADEP=", "", "=");
System.out.println("condition:"+condition); //condition:(1)&&(((1)||(0)||(0)||(0)||(0)||(0))&&(0)) /**
* 数字表达式解析工具
* Evaluator需要下载jeval包,本文后附上链接
*/
Evaluator evaluator = new Evaluator();
boolean b = evaluator.getBooleanResult(condition); // false
System.out.println(b);
System.out.println(evaluator.evaluate("2+3")); // 5.0 } /**
*
* @param condition
* @param replace
* @param toBeCompared
* @param operators
* @return
* @throws Exception 对于不符合计算的会抛出异常
*/
public static String replaceExpression(String condition, String replace,
String toBeCompared, String operators) throws Exception {
while (condition.contains(replace)) {
int start = condition.indexOf(replace);
int end = condition.indexOf("##", start);
String express = condition.substring(start, end);
express = express.substring(replace.length());
if (">=".equals(operators)) { if (Long.parseLong(toBeCompared) >= Long.parseLong(express)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
} else if ("<=".equals(operators)) {
if (Long.parseLong(toBeCompared) <= Long.parseLong(express)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
} else if (">".equals(operators)) { if (Long.parseLong(toBeCompared) > Long.parseLong(express)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
} else if ("<".equals(operators)) {
if (Long.parseLong(toBeCompared) < Long.parseLong(express)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
} else if ("!=".equals(operators)) {
if (!express.equals(toBeCompared)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
} else {
if ("RADDRESS=".equals(replace)) {
String[] toBeComparedArray = toBeCompared.split(" ");
String flag = "0";
for (String toBeComparedString : toBeComparedArray) {
if (express.equals(toBeComparedString)) {
flag = "1";
break;
}
}
condition = condition.substring(0, start) + flag
+ condition.substring(end + 2); } else {
if (express.equals(toBeCompared)) {
condition = condition.substring(0, start) + "1"
+ condition.substring(end + 2);
} else {
condition = condition.substring(0, start) + "0"
+ condition.substring(end + 2);
}
}
}
}
return condition;
}
}

相关jar包下载:http://files.cnblogs.com/files/x-jingxin/jeval.zip

Java数据处理的更多相关文章

  1. [java] 数据处理

    背景: 有一组30天内的温度与时间的数据,格式如下: 详细情况:共30天的8k+项数据,每天内有260+项,每个记录温度的时间精确到秒 任务就是想根据这样的数据找到规律,来完成给定具体的时间预测出此时 ...

  2. JAVA数据处理的常用技术

    背景 在实际开发中,数据的处理有五种:获取.传输.存储.分析.转换.每种各对应一些常用的技术. 序列化和反序列化 序列化是将对象的信息转换为可传输或可存储形式的过程.反序列化就是反过来让这些可传输的. ...

  3. Java数据处理,Map中数据转double并取小数点后两位

    BigDecimal order = (BigDecimal) map.get("finishrat"); double d = (order == null ? 0 : orde ...

  4. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  5. Java编程实战宝典PDF (中文版带书签)

    Java编程实战宝典PDF 目录 第1篇 Java基础知识入门第1章 Java的开发运行环境( 教学视频:57分钟)1.1 Java运行原理与Java虚拟机1.1.1 Java运行原理简述1.1.2 ...

  6. Spring框架快速入门之简介

    Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...

  7. 转:eval(data)和eval("("+data+")")

    http://www.w3school.com.cn/jsref/jsref_eval.asp JavaScript eval() 函数:eval() 函数可计算某个字符串,并执行其中的的 JavaS ...

  8. Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)

    不多说,直接上代码. 一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先 ...

  9. Spring学习【Spring概述】

    从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...

随机推荐

  1. 动态配置log4j2.xml日志输出文件的位置

    目标:根据启动jar时传进main()的参数动态修改日志位置 一.修改启动项 MainMapLookup.setMainArguments(args);注:不要在lookup设置之前初始化log(如: ...

  2. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)

    1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...

  3. (转)Java实现Web Service过程中处理SOAP Header的问题

    网上有篇文章,大致这么说的(如下文),最后我采用的wsimport  -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...

  4. [Cuckoo SandBox]注入原理篇

    1.LoadExe 接python版本 通过调用LoadExe去加载Dll进行注入 所以先看LoadExe 加载器的功能吧 通过python管道接收到  processID,ThreadID,路径 , ...

  5. 设计模式之装饰器模式io的小入门(十一)

    装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...

  6. 应该知道的一些Markdown语法

    目录 快速输入标题 斜体和粗体,删除线 分隔线 外链接 无序列表 有序列表 定义型列表 插入图片 文字引用 标签分类 表格 行内代码块 代码段 注脚 待办事宜 Todo 列表 显示当前文章的目录 快速 ...

  7. div多选控制

    此点击按钮,弹出DIV,div内容可以多项选择,点击确定,被选项回填至文本框.功能类似之前写过的一篇日期多选,不过是在其基础上,新增点击页面其他区域,隐藏div功能. 1.css部分代码 .multi ...

  8. ZIP文件压缩和解压

    最近要做一个文件交互,上传和下载, 都是zip压缩文件,所以研究了下,写了如下的示例 注意引用  ICSharpCode.SharpZipLib.dll 文件 该dll文件可以到官方网站去下载, 我这 ...

  9. sql分组数据去重

    #分组获得每个机柜里服务器占用的机架总数,如552807e6-b428-4184-b219-ae368c68ddb3占用4个 mysql> select cabinet_uuid, count( ...

  10. 常用HTML富文本编辑器

    常用的HTML富文本编译器UEditor.CKEditor.TinyMCE.HTMLArea.eWebEditor.KindEditor简介   这篇文章主要介绍了常用的HTML富文本编译器UEdit ...