Rhino——一个可以在Java中操作和执行JS的框架
    前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式。
结果方案五花八门:
1.jakarta commons JEXL. 
2.Beanshell
3.Java Math Expression Parser jep 
4.parse combinator jparsec 
5.jdk 6.0的 script
6.利用SQL 
7.自己写语法分析
如果自己写语法分析,没有个2000行估计搞不定。有人用sql来运行数学表达式,比较另类。
不过由于前段时间较深入的学习了一些java的javascript引擎,我给出的方案就是用javascript来计算了。
java中比较著名的js引擎当属mozilla开源的rhino,不过jdk6已经把它收归帐下,成了正规军。
- public?class?MathEval ??
 
- { ??
 
- 
????public?static?void?main(String[]?args) ?? 
 
- ????{ ??
 
- ????????Context?cx?=?Context.enter(); ??
 
- 
????????try?? 
 
- ????????{ ??
 
- ????????????Scriptable?scope?=?cx.initStandardObjects(); ??
 
- 
????????????String?str?=?"9*(1+2)"; ?? 
 
- 
????????????Object?result?=?cx.evaluateString(scope,?str,?null,?1,?null); ?? 
 
- 
????????????double?res?=?Context.toNumber(result); ?? 
 
- ????????????System.out.println(res); ??
 
- ????????} ??
 
- 
????????finally?? 
 
- ????????{ ??
 
- ????????????Context.exit(); ??
 
- ????????} ??
 
- ????} ??
 
- }??
 
 
下面总结一下前段时间学习rhino的心得(给自己的程序添加脚本功能,其实是很酷的):
一:环境配置及运行js脚本:
在 http://www.mozilla.org/rhino/ 下载rhino:
把js.jar加入系统CLASSPATH中
可以以交互模式调用js解释器:
java org.mozilla.javascript.tools.shell.Main
然后您应该会看到解释器的版本号,后面跟着提示符 js> 
用法如下:
比如:有一个js文件:
D:\eclipse-workshop\rhinoExample\src\isPrime.js
内容如下:
js 代码
- function?isPrime?(num) ??
 
- { ??
 
- 
????if?(num?<=?1)?{ ?? 
 
- 
????????print("Please?enter?a?positive?integer?>=?2.") ?? 
 
- 
????????return?false?? 
 
- ????} ??
 
- ???? ??
 
- 
????