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的思想都是非常值得学习与使用的.以下 ...
随机推荐
- 动态配置log4j2.xml日志输出文件的位置
目标:根据启动jar时传进main()的参数动态修改日志位置 一.修改启动项 MainMapLookup.setMainArguments(args);注:不要在lookup设置之前初始化log(如: ...
- 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...
- (转)Java实现Web Service过程中处理SOAP Header的问题
网上有篇文章,大致这么说的(如下文),最后我采用的wsimport -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...
- [Cuckoo SandBox]注入原理篇
1.LoadExe 接python版本 通过调用LoadExe去加载Dll进行注入 所以先看LoadExe 加载器的功能吧 通过python管道接收到 processID,ThreadID,路径 , ...
- 设计模式之装饰器模式io的小入门(十一)
装饰器模式详解地址 原文总结 定义: 在不必改变原类文件和使用继承的情况下, 动态的扩展一个对象的功能. 通过创建一个包装对象, 也就是装饰来包裹真实的对象 部分详解提示 看了一些文档, 装饰器模式非 ...
- 应该知道的一些Markdown语法
目录 快速输入标题 斜体和粗体,删除线 分隔线 外链接 无序列表 有序列表 定义型列表 插入图片 文字引用 标签分类 表格 行内代码块 代码段 注脚 待办事宜 Todo 列表 显示当前文章的目录 快速 ...
- div多选控制
此点击按钮,弹出DIV,div内容可以多项选择,点击确定,被选项回填至文本框.功能类似之前写过的一篇日期多选,不过是在其基础上,新增点击页面其他区域,隐藏div功能. 1.css部分代码 .multi ...
- ZIP文件压缩和解压
最近要做一个文件交互,上传和下载, 都是zip压缩文件,所以研究了下,写了如下的示例 注意引用 ICSharpCode.SharpZipLib.dll 文件 该dll文件可以到官方网站去下载, 我这 ...
- sql分组数据去重
#分组获得每个机柜里服务器占用的机架总数,如552807e6-b428-4184-b219-ae368c68ddb3占用4个 mysql> select cabinet_uuid, count( ...
- 常用HTML富文本编辑器
常用的HTML富文本编译器UEditor.CKEditor.TinyMCE.HTMLArea.eWebEditor.KindEditor简介 这篇文章主要介绍了常用的HTML富文本编译器UEdit ...