2013-10-24 20 views
0

我有一些數學表達式爲Java Strings (100 % 6)* 7 =Sin(45) + log 100 – 3^5 =。我想解析這些操作數和操作符然後解決它們。如何解析operans和運算符的數學表達式並解決它而不使用Regex?

但我不想使用Java正則表達式。什麼是最好的解決方案?

+0

它不是'分裂',它被稱爲'掃描'(或'標記化')和'解析'。 – EJP

+0

@EJP tahnk你,我只是編輯它 – Ehsan

+0

所以你需要一個解析技術,你可以從Java訪問。有些問題已經提出並回答了這個問題。 http://stackoverflow.com/questions/1792261/java-maths-parsing-api – Lisa

回答

1

bison + yacc可能是你想要的,一個LALR文本解析器。

+0

我推薦兩種基於Java的解決方案:ANTLR或JavaCC。前者更加現代化,並得到更好的支持。 – duffymo

1
import javax.script.ScriptEngineManager; 
import javax.script.ScriptEngine; 

public class aaa { 



    public static void main(String []args){ 

     try { 


     String xyz = "3*3+3"; 
     String kkk = "(100 % 6)* 7"; 

     ScriptEngineManager manager = new ScriptEngineManager(); 
     ScriptEngine se = manager.getEngineByName("JavaScript");   
     Object result1 = se.eval(xyz); 
     Object result2 = se.eval(kkk); 


     System.out.println("result1: "+result1); 
     System.out.println("result2: "+result2); 


     } 
     catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

} 
+1

它使用JavaScript引擎,但我想在JAVA中處理,它不能計算罪惡和日誌 – Ehsan

+1

僅僅是代碼不是SO的答案。你必須解釋。 – EJP

+0

這是Java代碼。 Rhino內置於Java。我不同意EJP - 代碼是完全沒問題的。盡你所能。如果他發佈了代碼,你不會討厭Jon Skeet。 – duffymo