我試圖創建一個Java程序,它能夠在輸入中綴表達式時遵循操作的順序。爲了簡化輸入,我決定使用regex
表達式來分割整個字符串。我已經能夠將除6 3
之外的所有內容都拆分成splitLine
陣列中自己的String
值。在此我SSCCE嘗試如下:Java中的infix表達式的正則表達式問題
String line = "6 + 5 + 6 3 + 18";
String regex = "(?<=[-+*/()])|(?=[-+*/()])"; //Not spitting 6 3 correctly
String[] splitLine = line.split(regex);
for (int i=0; i<splitLine.length; i++) {
System.out.println(splitLine[i]);
}
輸出:
6
+
5
+
6 3 //Error here
+
18
預期輸出:
6
+
5
+
6 //Notice
3 //these
+
18
我試過,並試圖修改我的正則表達式的表達,並已成功。任何人都可以告訴我爲什麼我的正則表達式不會將6
和3
分割成splitLine
數組中的Strings
?
編輯:只是想指出的是,我這樣做的樂趣,它不是任何形式的學校工作,等我只是想看看我能不能寫一個程序來進行簡單的中綴表達式。我同意有更好的方法來做到這一點,如果表達式變得更復雜,我會遇到一些問題。但不幸的是,這就是我的書如何建議我接近這一步。
再次感謝所有的快速評論和答案!
首先,你的線不是字符串 - 編輯你的例子。第二,是的,你在6比3之間沒有運營商可以匹配,你期望在那裏有什麼樣的運營商? – Piro
正則表達式是這項工作的錯誤工具。你需要自己寫一個適當的掃描器和解析器。不要放棄它,現在就做,你只會浪費時間堅持這種方法。 – EJP
@EJP這正是我需要的。我需要每個元素都以正確的順序來表示,以便當我將它們放入堆棧時,我可以輕鬆地執行數學運算。 – Tdorno