問題:有時候會遇到一個字元串類型的算術表達式,全是常量,要求給這個常量表達式求值,這時候往往會令人陷入困境。
舉例來說吧,求一個算術式((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,如需轉載請自行聯系原作者