2015-09-05 43 views
-1

我有一個字符串形式的數學表達式。 String exp = "3 + 6 - 10 + 12 + 15"; 現在如何計算這個表達式的結果,就像我們用其他數學表達式一樣。 幫幫我。Java。如何評估一個String表達式?

+3

您必須在數字和運算符中翻譯您的字符串。它沒有功能。編輯:也許腳本引擎:http://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form – pL4Gu33

+0

看看[這個問題](http://stackoverflow.com/ q/4589951/2032064) – Mifeet

+0

謝謝你:D:D –

回答

-1

通過JDK 1.6或更高版本。

ScriptEngineManager mgr = new ScriptEngineManager(); 
    ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
    String expression = "3+6-10+12+15"; 
    try { 
     System.out.println(engine.eval(expression)); 
    } catch (ScriptException ex) { 
     System.out.println("Error occured."); 
    } 
+2

這很容易[代碼注入](https://en.wikipedia.org/wiki/Code_injection)...如果這個值取自用戶輸入和他們寫'txt =「a」; while(1){txt = txt + =「a」;}'?這會讓你崩潰。此外,惡意程序可能會運行。無論如何,使用Javascript只是計算一些基本的算術似乎有點硬核。 – bcsb1001

3

假設有可能只是+-操作,您可以刪除所有的空格,並將其拆分爲正,負整數,總結他們。

String expr = "3 + 6 - 10 + 12 + 15"; 
String[] nums = expr.replaceAll("\\s", "").split("\\+|(?=-)"); 
int result = Arrays.stream(nums).mapToInt(Integer::parseInt).sum(); 

如果表達式可能更復雜,但包括更多運算符或括號,則必須使用其他解決方案。

+0

這個解決方案比腳本引擎好得多。 –

0

可以使用BeanShell的bsh.Interpreter爲同:

Interpreter interpreter = new Interpreter(); 
interpreter.eval("result = 5+4*(7-15)"); 
System.out.println(interpreter.get("result")); 

它將評估複雜的數學表達式。