对于形如“(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. javascript document.referrer 用法

    document对象的referrer属性,返回导航到当前网页的超链接所在网页的URL. 举例: 1. a.html文件内容如下: <a href="b.html">浏 ...

  2. React.js 小书 Lesson2 - 前端组件化(一):从一个简单的例子讲起

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson2 转载请注明出处,保留原文链接和作者信息. 很多课程一上来就给大家如何配置环境.怎么写 Re ...

  3. 【转】Android 中的 Service 全面总结

    1.Service的种类   按运行地点分类: 类别 区别  优点 缺点   应用 本地服务(Local) 该服务依附在主进程上,  服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另 ...

  4. Session有什么重大BUG,有什么方法可以解决

    [考点]ASP.NET中Session的多种保存方法.[出现频率]★★★☆☆[解答]使用进程内会话状态模式时,如果aspnet_wp.exe或应用程序域重新启动,则会话状态数据将丢失.可以用Sate ...

  5. Devexpress Xtrareport 创建主从报表

    效果 xtrareport 布局 From 代码 private DataSet Getdata() { DataSet ds = new DataSet(); //config配置字符串 strin ...

  6. SpringBoot JPA注解详解

    1.@OneToOne 2.@OneToManytargetEntity: 默认关联的实体类型.如果集合类中指定了具体类型了,不需要使用targetEntity.否则需要targetEntity指定C ...

  7. 在DataColumn.Expression把DateTime转换成String的问题

    我在使用MySql5.1的数据库中,使用winForm的DataGridView要把数据库中全称DateTime格式,转换成Date格式,就是把日期时间转换成日期,不要时间.如‘2013-07-08 ...

  8. jsp---tomcat===》》内置对象

    1.内置对象:    request: 方法:getParameter("txtName"):获取和页面上的name属性对象的value值       返回String       ...

  9. spring笔记2-注解

    一.属性与成员变量的区别: 属性:对外暴露的,getxxx/setxxx称为属性; 成员变量:private String name称为成员变量或字段 二.applicationContext.xml ...

  10. css3 走马灯效果

    纯css3实现了一个正六边形的走马灯效果,记录一下css3动画的学习情况,效果如下: 主要用到的css3技术有:keyframes.perspective.perspective-origin.tra ...