2011-01-11 121 views
2

我有一個字符串,比如說「5 + 30」,我需要將它解析爲令牌5,30,+。我怎麼做?除了「+」,還可以有任何算術運算符?我認爲正則表達式可以做到,但我不是輕蔑他們。非常感謝你的幫助。解析計算令牌

+0

你的表達式是否有括號? – aioobe 2011-01-11 17:44:57

+0

http://stackoverflow.com/questions/1320891/java-rpn-reverse-polish-notation-infix-to-postfix和http://stackoverflow.com/questions/4240595/getting-wrong-outputs-in-infix -java-to-postfix-application-with-java似乎涵蓋Java中的infix-to-postfix轉換。 – dkarp 2011-01-11 17:49:57

回答

0

下面是一個使用Scanner類爲例begenning例子:

Scanner s = new Scanner("53+12-1+12"); 
String token; 
while (null != (token = s.findInLine("\\d+|[+-]"))) 
    System.out.println(token); 

輸出:(ideone.com demo

53 
+ 
12 
- 
1 
+ 
12 

但是,請注意,如果您嘗試評估表達式這將是有限的幫助作爲y你仍然需要照顧運營商優先和可能的父母。我建議你爲這樣的任務使用合適的解析器生成器。

0

應該爲你工作正則表達式是:

[0-9]+|[^0-9]+ 

你會使用java字符串匹配或匹配器類來完成這些工作你

您可以設定要支持運營商的更換[^ 0-9] +的一部分,例如:

[0-9]+|[+-/*] 
2

我假設你正在嘗試編寫某種算術處理器,所以我建議你使用一個解析器生成器,如ANTLR。它有一個編寫算術文法的教程。

解析器生成器非常一般,所以它可能會對您的項目過度,但它仍然值得一看。瞭解如何使用解析器生成器(以及更重要的是何時)總是非常有用。

0

您可以查看pattern以獲取更好的文檔。 您的字符串將對應於像[0-9]+\p{Punct}{1}[0-9]+ 有一個在文檔中如何使用它