对于形如“(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. Cgroup blkio简介和测试(使用fio测试)

    Cgroup blkio简介和测试(使用fio测试) 因需要对docker镜像内的进程对磁盘读写的速度进行限制,研究了下Cgroup blkio,并使用fio对其iops/bps限速进行测试. Cgr ...

  2. 开发安全的 API 所需要核对的清单

    开发安全的 API 所需要核对的清单 以下是当你在设计, 测试以及发布你的 API 的时候所需要核对的重要安全措施. 身份认证 不要使用 Basic Auth 使用标准的认证协议 (如 JWT, OA ...

  3. [转].NET Core配置文件加载与DI注入配置数据

    本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...

  4. Props 和 IActorRef 3

    在Actor模式中我们使用IActorRef通过ActorSystem来发送消息数据.这么做有两个理由 1.ActorSystem会在消息中封装一些元数据(metadata),这些数据我们可以通过上下 ...

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

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

  6. 非关系型数据库(NOSQL)-Redis

    整理一波Redis 简介,与memcached比较 官网:http://redis.io Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  7. Native Method

    While a 100% pure Java solution is nice in principle, realistically, for an application, there are s ...

  8. Android基础Activity篇——Intent返回数据给上一个活动

    1.如果活动B要将数据返回给活动A,那么需要以下三步: 1.1在活动A中使用startActivityForResult()方法启动活动B. 1.2在活动B中使用setResult()方法传回Iten ...

  9. 用Python爬虫对豆瓣《敦刻尔克》影评进行词云展示

    最近很想看的一个电影,去知乎上看一下评论,刚好在学Python爬虫,就做个小实例. 代码基于第三方修改 原文链接  http://python.jobbole.com/88325/#comment-9 ...

  10. 仿照everything写的一个超级速查 原创

    http://files.cnblogs.com/files/jacd/%E8%B6%85%E9%80%9F%E6%9F%A5%E6%96%87%E4%BB%B6.zip 速度奇快无比,体积奇小无比, ...