天天看点

表达式求值组件Jeval

问题:有时候会遇到一个字符串类型的算术表达式,全是常量,要求给这个常量表达式求值,这时候往往会令人陷入困境。

举例来说吧,求一个算术式((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就是干这活来着!

小试一把,感觉:很好,很强大!

/** 

* 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 

1.0 

-42.0 

-36.52277442494834 

-41.14909647546588 

Process finished with exit code 0 

这个工具其实很好用,只要看看Evaluator 类的API就够了,就不多赘述了。

----------------------------

另外,有人手写一个类似的,功能比较弱,看看:

<a href="http://www.blogjava.net/linlin2005/archive/2006/08/02/61315.html">http://www.blogjava.net/linlin2005/archive/2006/08/02/61315.html</a>

 本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/171144,如需转载请自行联系原作者

继续阅读