java智能推算出时间_Java智能计算

昨天有位刚入行的java工程师问我有没有什么方法直接执行通过远程调用获取到的公式,我当时脑子里面第一冒出来是js的eval函数,我就告诉他js的eval()可以实现他的需求,当时由于他没怎么接触js,听得一脸懵逼,我这才反应过来他是写java的。由于我的工作中很少遇到这种应用场景,当时我也没想起java里面怎么实现,当时的想法是把那个公式当作一段java代码,然后实时编译、执行;转念又一想,java这么古老强大的语言,这种应用场景肯定早就有很好的原生解决方案了。搜索了一下,找到2种实现方案。1、JDK1.6里面的ScriptEngine;2、JEXL。

下面分别说明一下2种方案的具体使用。

ScriptEngine

JDK1.6引入ScriptEngine,用于执行JavaScript这样的脚本语言,所以js的eval函数当然也可以通过它来执行。

public static void test1(){

String ddd = "10+20";

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");

Object result = null;

try {

result = engine.eval(ddd);

} catch (ScriptException e) {

e.printStackTrace();

}

System.out.println("结果类型:" + result.getClass().getName() + ",计算结果:" + result);

}

JEXL

Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL 受Velocity 和 JSP 标签库 1.1 (JSTL) 的影响而产生的。需要注意的是, JEXL 并不是 JSTL 中的表达式语言的实现。

使用JEXL需要引入对应的jar包。

org.apache.commons

commons-jexl3

3.1

具体使用如下:

public static void test2(){

JexlEngine jexl = new JexlBuilder().create();

String jexlExp = "10+20";

JexlExpression e = jexl.createExpression( jexlExp );

// Create a context and add data

JexlContext jc = new MapContext();

//jc.set("foo", new Foo() );

Object result= e.evaluate(jc);

System.out.println("结果类型:" + result.getClass().getName() + ",计算结果:" + result);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值