Java中利用Interpreter动态编译实现eval
2016-05-03 15:49
591 查看
Java中利用Interpreter动态编译实现eval
在很多脚本语言中都有eval函数,它可以把字符串转换成表达式并执行。
如在javascript中:
var str = “1+1*3+5”;
alert(eval(str));
则会弹框输出 9
那么在java中,如何实现这个功能呢?其实我们可以用动态编译来实现:
首先要到http://www.beanshell.org/download.html
官网去下载BeanShell的一个jar包,如bsh-2.0b4.jar,然后在项目中引入。
测试代码如下:
在很多脚本语言中都有eval函数,它可以把字符串转换成表达式并执行。
如在javascript中:
var str = “1+1*3+5”;
alert(eval(str));
则会弹框输出 9
那么在java中,如何实现这个功能呢?其实我们可以用动态编译来实现:
首先要到http://www.beanshell.org/download.html
官网去下载BeanShell的一个jar包,如bsh-2.0b4.jar,然后在项目中引入。
测试代码如下:
package InterpreterTest; import bsh.Interpreter; public class TestEval { public static void main(String[] args) throws Exception { Interpreter in = new Interpreter(); in.eval("for(int i=0; i<3; i++) { System.out.println(\"hello\"); }"); String s = "2>3||3>4&&5<4"; in.set("boolean", in.eval("(" + s +")")); System.out.println(in.get("boolean")); } }输出结果:
相关文章推荐
- Java中路径问题
- java常量池
- Java多线程中wait, notify and notifyAll的使用
- Java中实现同步的集合
- JavaEE中遗漏的10个最重要的安全控制
- Java final关键字
- JAVA数据压缩简单测试
- 第六届蓝桥杯省赛(java)C组试题及参考答案
- spring核心容器
- JAVA 位操作学习
- 通过js把html标签转化为普通字符,再用java进行反转
- JAVA线程的创建与启动线程
- 对象序列化问题
- Struts+spring+Hibernate+Mysql--环境搭建
- 【JAVA】在线程里使用线程外的变量为什么一定要是final类型
- 利用java script获取两个日期区间内数组的方法
- eclipse mar整合lombok
- eclipse install gradle plugin used to create the gradle project
- java web学习路线
- Java多线程