Java数据处理
对于形如“(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数据处理的更多相关文章
- [java] 数据处理
背景: 有一组30天内的温度与时间的数据,格式如下: 详细情况:共30天的8k+项数据,每天内有260+项,每个记录温度的时间精确到秒 任务就是想根据这样的数据找到规律,来完成给定具体的时间预测出此时 ...
- JAVA数据处理的常用技术
背景 在实际开发中,数据的处理有五种:获取.传输.存储.分析.转换.每种各对应一些常用的技术. 序列化和反序列化 序列化是将对象的信息转换为可传输或可存储形式的过程.反序列化就是反过来让这些可传输的. ...
- Java数据处理,Map中数据转double并取小数点后两位
BigDecimal order = (BigDecimal) map.get("finishrat"); double d = (order == null ? 0 : orde ...
- Java架构师之路 Spring学习笔记(一) Spring介绍
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
- Java编程实战宝典PDF (中文版带书签)
Java编程实战宝典PDF 目录 第1篇 Java基础知识入门第1章 Java的开发运行环境( 教学视频:57分钟)1.1 Java运行原理与Java虚拟机1.1.1 Java运行原理简述1.1.2 ...
- Spring框架快速入门之简介
Spring是java平台上的一个开源应用框架.它的第一个版本是由Rod Johnson写出来的.Rod在他的Expert One-On- One Java EE Design and Develop ...
- 转:eval(data)和eval("("+data+")")
http://www.w3school.com.cn/jsref/jsref_eval.asp JavaScript eval() 函数:eval() 函数可计算某个字符串,并执行其中的的 JavaS ...
- Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
不多说,直接上代码. 一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先 ...
- Spring学习【Spring概述】
从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...
随机推荐
- React.js 小书 Lesson2 - 前端组件化(一):从一个简单的例子讲起
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson2 转载请注明出处,保留原文链接和作者信息. 很多课程一上来就给大家如何配置环境.怎么写 Re ...
- POJ 3522 ——Slim Span——————【最小生成树、最大边与最小边最小】
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7102 Accepted: 3761 Descrip ...
- MVC4 过滤器使用和怎样控制全部action和部分action
MVC中的过滤器分四种分别为:IActionFilter(动作过滤器), IAuthorizationFilter(授权过滤器), IExceptionFilter(异常过滤器), IResultFi ...
- GitHub安装缓慢甚至下载失败的解决办法
1.打开控制面板→ Internet 选项→“安全”选项卡. 2.选择“受信任的站点”→点击“站点”按钮. 3.弹出的窗口中的文本框中输入点击“添加” https://github-windows.s ...
- 浅谈python的深浅拷贝
python中有两种数据类型:一种是可变数据类型,一种是不可变数据类型 不可变数据类型包括(整型及其他数据类型,字符串及元组) 可变数据类型(列表,集合,字典,类和类实例) 鉴定是否为拷贝还是只是引用 ...
- Python列表边遍历边修改问题解决方案:alist[:]
最近在看python,遇到个简单的问题:删除列表中指定的重复元素,发现一些实用并且有趣的东西. 1.错误示范 alist = [1,1,2,2,3,3,2,2,1,1] for i in alist: ...
- [UnityShader]点染队列、ZWrite和ZTest
转载自:http://www.myexception.cn/mobile/1902628.html [UnityShader]渲染队列.ZWrite和ZTest 参考链接:http://blog.cs ...
- Struts2_HelloWorld_7_2
第一个程序的流程图: Struts2.x 的作用:把请求和展现分开.
- 分布式系统ID生成方案汇总
在分布式系统中,需要对大量的数据.消息.请求等进行唯一的标识,例如分布式数据库的ID需要满足唯一且多数据库同步,在单一系统中,使用数据库自增主键可以满足需求,但是在分布式系统中就需要一个能够生成全局唯 ...
- Linux安装 NTFS 支持
my system kernel Version is 2.6.18-128.el5 在这个地址下载了 kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10 ...