2016-09-30 62 views
0

我有一個難題,我需要將一個可能的不同數學字符串分離成單獨的實體以存儲在ArrayList中。Java與數學運算符正則表達式

從掃描儀讀取輸入可能是以下任何一種。

Scanner input = new Scanner(System.in); 
String read = input.nextLine(); 
ArrayList al = new ArrayList(); 

-5 + 10 //possible value of read 
9--5 //possible value of read 
-20* 10 //possible value of read 

基本上我需要抓住的第一個數字和一個潛在的負號,全部忽略開頭或結尾的空白並儲存起來,然後採取下一個字符忽略空格和存儲它(問題的運營商),和然後下一個帶有可選負號的數字,再次忽略空格。

我對正則表達式不是很滿意,而且這裏有很多複雜的可能性,我不知道該如何解決。

如果我不得不在邏輯上攤開來,我會說,它正是如此:

獲取第一個非空格字符和結尾處直接跟隨它最後一個號碼數字。

獲取下一個非空白字符

在直接跟隨它最後數位獲取下一個非空格字符和結尾。

語法上的任何指針可以完成該操作?

編輯︰我不是簡單地試圖evualuate表達的結果的問題,我需要將其分解並將其存儲在一個ArrayList以後操作作爲分數類的一部分。

+2

你不應該使用正則表達式爲此,因爲它不會用嵌套的算術表達式進行縮放。相反,你需要一個解析器。 –

+0

你必須使用正則表達式嗎?如果沒有,請查看此[答案](http://stackoverflow.com/a/36341949/4256677) – varontron

回答

0

不是真的優雅的,但如果你正在尋找的正則表達式搶號正反兩方面的,你可以使用這個表達式

-?\d+|\*|\/|\+|\-

-查找負數

?使它可選搜索

\d尋找一個數字

+抓住一切直到空白

管道是指「或」,所以會搶了積極的負數,或者*/,或+-