- 浏览: 2110916 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪wan:
private static final Log log = ...
log4j Category.callAppenders Block -
yjxa901:
博主好: http://www.java.net/down ...
jdk debug -
aptech406328627:
大神,请接收我的膜拜吧,纠结了两天的问题,就这么让你给解决了 ...
java.lang.reflect.MalformedParameterizedTypeException -
xukunddp:
谢谢1楼,我也遇到,搞定了
java.lang.reflect.MalformedParameterizedTypeException -
di1984HIT:
学习了!!!!
jvmstat hsperfdata java.io.tmpdir
最近在项目中需要利用到类似javascript的eval函数的功能来执行一个String表达式,例如表达式为:
String expression= "((parm1<456)||(time*time>(modifyTime*5000-200))) && (((money <10000||money*money>=100000)))";
其中有几个变量: parm1 time modifyTime money。
然后找到了几个脚本语言来实现这一功能。下面我为大家一一介绍。
首先是很老资格的Beanshell
Beanshell import bsh.EvalError; import bsh.Interpreter; import bsh.ParseException; import bsh.TargetError; public class BeanShellEngine { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String ruleStirng= "((parm1<456)||(time*time>(modifyTime*5000-200))) && (((money <10000||money*money>=100000)))"; Interpreter in = new Interpreter(); Object res=null; try { in.set("parm1",123); in.set("time", 456); in.set("modifyTime",789); in.set("money",123456); res= in.eval(ruleStirng); System.out.println(res); } catch (ParseException pe) { pe.printStackTrace(); } catch (TargetError te) { System.out.println(te.getErrorLineNumber() + "" + te.getErrorText()); } catch (EvalError ee) { ee.printStackTrace(); } } }
接着是Groovy
Groovy import groovy.lang.GroovyShell; import java.io.IOException; import org.codehaus.groovy.control.CompilationFailedException; public class GroovyEngine { public static void main(String[] args) { GroovyShell shell = new GroovyShell(); String ruleStirng= "((parm1<456)||(time<(modifyTime-200))) && (money >10000)"; try { Object result=null; shell.setProperty("money",123); shell.setProperty("time", 456); shell.setProperty("modifyTime",789); shell.setProperty("parm1",123456); result = shell.evaluate(ruleStirng); System.out.println(result); } catch (CompilationFailedException cfe) { System.out.println("Syntax not correct " + cfe); } } }
接着是IK(javaeye上一牛人写的 可以搜索IK表达式 IK分词等)
import java.util.ArrayList; import java.util.List; import org.wltea.expression.ExpressionEvaluator; import org.wltea.expression.datameta.Variable; public class IkEngine { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //定义表达式 String ruleStirng= "((parm1<456)||(time<(modifyTime-200))) && (money >10000)"; List<Variable> variables = new ArrayList<Variable>(); Object result=null; variables.add(Variable.createVariable("money"123)); variables.add(Variable.createVariable("modifyTime",456)); variables.add(Variable.createVariable("time",789)); variables.add(Variable.createVariable("parm1",123456)); //执行表达式 result = ExpressionEvaluator.evaluate(ruleStirng, variables); System.out.println("Result = " + result); } }
接着是JPython
import org.python.util.PythonInterpreter; public class PythonEngine { /** * @param args */ public static void main(String[] args) { PythonInterpreter in = new PythonInterpreter(); String ruleStirng= "((parm1<456)|(time<(modifyTime-200)))&(money >10000)"; Object result =null; in.set("money",123); in.set("time",456); in.set("modifyTime",789); in.set("parm1",123456); result=in.exec(ruleStirng); System.out.println(result); } }
接着是Mvel(JBOSS RULE里使用的)
import java.io.Serializable; import java.util.HashMap; import java.util.Map; import org.mvel2.MVEL; public class MvelEngine { public static void main(String[] args) { String expression= "((parm1<456)||(time*time>(modifyTime*5000-200))) && (((money <10000||money*money>=100000)))"; Serializable compiled = MVEL.compileExpression(expression); Map vars = new HashMap(); Object result =null; vars.put("parm1",123); vars.put("time",456); vars.put("modifyTime",789); vars.put("money",123456); result= MVEL.executeExpression(compiled, vars); System.out.println(result); } }
接着是:Jruby (抱歉由于我对Ruby不感兴趣所以这个我没用只是下了jar)
接着是:rhinol(mozilla 开发的脚本语言)
import java.io.FileReader; import java.io.IOException; import org.mozilla.javascript.Context; import org.mozilla.javascript.JavaScriptException; import org.mozilla.javascript.Scriptable; public class ScriptEngine { /** * @param args */ public static void main(String[] args) { try { Context cx = Context.enter(); String ruleStirng= "((parm1<456)||(time<(modifyTime-200)))&&(money >10000)"; Scriptable scope = cx.initStandardObjects(); Object result =null; scope.put("money", scope,1); scope.put("time", scope,2); scope.put("modifyTime", scope,3); scope.put("parm1", scope,4); result= cx.evaluateString( scope, ruleStirng ,"<cmd>", 1, null ); System.out.println(result); } catch (JavaScriptException jse) { jse.printStackTrace(); } finally { Context.exit(); } } }
评论
2 楼
michaelzhouh
2014-02-19
如果有一个public static String md5(String password){..},表达式包含这个md5("123456")咋个整呢?
1 楼
x007700x
2012-11-17
好东东啊
发表评论
-
groovy shell 安全
2017-01-18 11:29 1212groovy 可以动态执行代码,但是我们也想他在一定的沙箱中 ... -
eclipse 插件
2016-11-17 12:00 628eclipse remote editor https: ... -
java method signature
2013-08-12 21:07 2726case 'B': _type = T_BYT ... -
eclipse显示GC的按钮
2013-06-18 19:32 4347同事说idea的一个比较亮的功能是可以手动去GC,然后机器 ... -
好用的maven插件收集
2013-02-22 10:40 13521:Maven Shade Plugin(把所有jar打到一 ... -
查看JVM Flags
2013-01-09 14:22 1343-XX:+PrintFlagsFinal Jav ... -
开源的好用JVM问题排查工具
2013-01-08 09:45 1865TProfiler https://github.com/ ... -
java ocr
2013-01-04 13:06 3039java OCR相关的资料记录 Clara OC ... -
eclipse ast
2012-12-23 22:36 1021Eclipse JDT - Abstract Syntax ... -
正则生成器
2012-12-23 22:24 982能够依据普通文本给出可能的正则组合 http://ww ... -
Kilim
2012-12-14 23:40 1113Java 开发 2.0: Kilim 简介 h ... -
IO Design Patterns Reactor VS Proactor
2012-11-13 01:34 15141:两种高性能I/O设计模式(Reactor/Proactor ... -
antlr
2012-11-13 00:36 12271:使用 Antlr 开发领域语言 http://www.i ... -
java singalException
2012-11-12 21:39 986之前看到毕大师一封关于异常多造成的cpu us很高的分析邮件, ... -
log4j Category.callAppenders Block
2012-11-06 17:01 10164经常在高并发下就遇到log4j用错引起的线程block住的问题 ... -
Troubleshooting JDK
2012-10-26 14:13 1537收集整理下JDK自带的关于 Troubleshooting 的 ... -
JavaOne 2011 Content Catalog
2012-10-14 17:12 1174上一篇讲javaone 2012,这次找了下2011的资料。 ... -
JavaOne 2012 Content Catalog
2012-10-13 16:07 1315转载自:http://marxsoftware.blogspo ... -
Memory usage of Java
2012-10-01 17:30 1222用JDK自带的api计算size,每次都会有个多余的12,看了 ... -
GC roots
2012-10-01 17:07 18561:GC roots http://www.yourkit. ...
相关推荐
在Java中模拟`eval`功能的一个常见方法是通过使用Java Scripting API(JSR 223),它允许你在Java应用程序中嵌入和执行脚本语言,包括JavaScript。以下是一个简单的例子,展示了如何使用JSR 223来执行JavaScript代码...
Java作为企业级应用的首选平台,有时也需要与脚本语言进行交互,以实现动态配置、自动化测试或者快速原型开发等需求。本文将深入探讨如何在Java中调用三种流行的脚本语言:Jython、JRuby和Groovy。 ### Jython ...
总之,Java脚本教程涵盖了如何在Java应用程序中集成和执行脚本语言的各个方面,包括如何发现和实例化脚本引擎,以及如何与不同的脚本环境进行交互。通过学习这些内容,开发者可以更好地利用Java的多语言支持,提高...
【标题】:“第 1 部分: 引入 Java 脚本 API” Java 脚本 API,也称为 Java Scripting API,是Java平台标准版(Java SE)的一部分,它允许Java...通过这种方式,开发者可以利用脚本语言的灵活性来增强Java应用的功能。
Java脚本应用数据是Java平台中使用脚本语言处理数据的一种技术。在Java中,你可以利用内置的ScriptEngine接口和相关的脚本引擎实现对不同脚本语言(如JavaScript、Groovy、Ruby等)的支持,从而在应用程序中进行动态...
Java脚本语言,通常指的是Java Scripting API (JSAPI) 或者是JavaScript,它是一种轻量级、解释型的编程语言,广泛应用于Web开发中,为网页提供动态交互功能。虽然名字相似,但它与Java语言在语法和用途上有所不同。...
Java脚本API设计用于在Java应用程序中嵌入脚本引擎的能力,无需依赖具体的脚本语言。这一API的核心价值在于提供了一种灵活的方式,使得开发者能够根据实际需求选择最适合项目的脚本语言,同时也允许最终用户根据个人...
在Java 6中,脚本化功能的核心在于`javax.script`包,它提供了一个通用接口,使得不同脚本语言可以在Java应用程序中无缝集成。`ScriptEngine`是这个包中的核心类,代表一个脚本引擎实例,可以执行脚本并处理脚本的...
Java脚本引擎1 在Java中,为了与各种脚本语言进行交互,如JavaScript,Java提供了ScriptEngine API,这是Java Scripting API的一部分。这个API允许Java应用程序执行动态脚本,或者利用脚本语言的能力来增强Java应用...
Java是一种广泛使用的面向对象的编程语言,而Perl则是一种功能强大的脚本语言,常用于文本处理和系统管理任务。在某些场景下,我们可能需要在Java应用程序中调用Perl脚本来执行特定的功能。JERL(Java-Embedding for...
### Java脚本编程知识点详解 #### 一、Java与JavaScript的区别 尽管“Java脚本编程”这个表述在日常交流中可能会被提及,但实际上...对于希望快速适应Java脚本语言的学习者来说,理解这些概念是非常重要的第一步。
在Java中,`eval`功能通常不直接提供,因为与脚本语言相比,Java是一种静态类型的语言,强调安全和性能。然而,通过使用Java的反射API和动态编译技术,可以实现类似的功能。动态编译是指在程序运行时将源代码编译成...
Java Scripting Programmer's Guide是Java Platform, Standard Edition的组件之一,提供了Java脚本引擎的编程指南。该指南详细介绍了Java脚本引擎的架构、配置、编程模型、安全机制等方面的内容。 Java脚本引擎架构...
2. `jsr223`接口:这个接口为脚本语言提供了Java Scripting API,使得Java程序能够调用JavaScript函数或对象就像它们是Java方法一样。 Nashorn引擎的一个关键特性是它可以与Java对象互操作。Java对象可以通过`...
Rhino的核心是ECMAScript的实现,这是一种标准化的脚本语言,JavaScript就是基于此标准的一种方言。ECMAScript提供了动态类型、函数式编程和原型继承等特性,使得Rhino成为Java开发者在服务器端或嵌入式环境执行...
脚本语言通常比传统编程语言更为简洁易懂,这使得非专业程序员也能够利用脚本语言来扩展应用程序的功能。目前,网络上有多种流行的脚本语言,包括TCL、Perl、JavaScript、Python等,这些语言中很多都有对应的Java...