求一个类似JAVASCRIPT函数eval的功能

adriftor 2012-05-24 03:41:08
现在JAVA是否有类似的函数?
如果没有,有没有插件?
OGNL可以实现吗?
比如一个字符串String str = "1+1";int result = eval(str);就能获得result=2
表示感谢
...全文
148 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小傅哥 2012-05-24
  • 打赏
  • 举报
回复
我可以跟你说个思路
我的思路是用java的动态代理
你知道proxy吧

那么我的思路是:
1:System.out.println(1+2*3);
2:用动态代理,把计算这部分动态加里面去
3:用java的proxy实例化,调用方法,就计算出来了

没有整理的代码片段,只供参考
我测试可以,你改下应该可以用

package com.j2se.xiaofu;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;

import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;

public class Aotian16 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub


try {
doProxy("1+2*3/6");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void doProxy(String str) throws Exception{
String rt = "\r\n";
String src =
"package com.j2se.xiaofu;" + rt+
"public class eval1{" +rt+
" public void doSum(){" +rt+
" System.out.println(" +str+
");" +rt+
" }" +rt+
"}";
String fileName = System.getProperty("user.dir")
+ "/src/com/j2se/xiaofu/eval1.java";
File f = new File(fileName);
FileWriter fw = new FileWriter(f);
fw.write(src);
fw.flush();
fw.close();

//compile
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
Iterable units = fileMgr.getJavaFileObjects(fileName);
CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);
t.call();
fileMgr.close();

//load into memory and create an instance
URL[] urls = new URL[] {new URL("file:/" + System.getProperty("user.dir") +"/src")};
URLClassLoader ul = new URLClassLoader(urls);
Class c = ul.loadClass("com.j2se.xiaofu.eval1");
Constructor ctr = c.getConstructor();
eval1 e = (eval1)ctr.newInstance();
e.doSum();
}
}
运行结果:2
zqfddqr 2012-05-24
  • 打赏
  • 举报
回复

1
java 的js引擎吧 http://blog.csdn.net/sdyy321/article/details/6959199

2
http://www.iteye.com/topic/87423

3
中文的 淘宝开源项目 表达式计算http://code.taobao.org/p/QLExpress/wiki/index/


.....

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧