问题:有时候会遇到一个字符串类型的算术表达式,全是常量,要求给这个常量表达式求值,这时候往往会令人陷入困境。
举例来说吧,求一个算术式((4 + 3) * -2) * 3 的值。
double x =((4 + 3) * -2) * 3;
System.out.println(x);
但求另外一个:((4 + 3) * -2) * 3 + sin(45),这下傻眼了吧。
double y =((4 + 3) * -2) * 3 + sin(45);
System.out.println(y);
这样写实错误的,因为sin符号不能被识别,这时候怎么办呢?
呵呵,Jeval就是干这活来着!
这是个开源项目,主页
http://jeval.sourceforge.net/
小试一把,感觉:很好,很强大!
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-6-30 15:01:29
*/
public class TestJeval {
public static void main(String args[]) throws EvaluationException {
Evaluator eval = new Evaluator();
System.out.println(eval.evaluate( "2*3-5/(3-1)"));
System.out.println(eval.evaluate( "7 / 2"));
System.out.println(eval.evaluate( "7 % 2"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3 + sqrt(30)"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3 + sin(45)"));
}
}
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-6-30 15:01:29
*/
public class TestJeval {
public static void main(String args[]) throws EvaluationException {
Evaluator eval = new Evaluator();
System.out.println(eval.evaluate( "2*3-5/(3-1)"));
System.out.println(eval.evaluate( "7 / 2"));
System.out.println(eval.evaluate( "7 % 2"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3 + sqrt(30)"));
System.out.println(eval.evaluate( "((4 + 3) * -2) * 3 + sin(45)"));
}
}
3.5
3.5
1.0
-42.0
-36.52277442494834
-41.14909647546588
Process finished with exit code 0
3.5
1.0
-42.0
-36.52277442494834
-41.14909647546588
Process finished with exit code 0
这个工具其实很好用,只要看看Evaluator 类的API就够了,就不多赘述了。
----------------------------
另外,有人手写一个类似的,功能比较弱,看看:
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/171144,如需转载请自行联系原作者