2013-02-23 92 views
0

可以說我有這個表達式I10I20I-3++應該給我27.我似乎無法找到一種方法來刪除那些I的,或者如果它是來自字符串的任何其他字母。另外,我必須找出一種方法來評估表達。我嘗試使用正則表達式,但沒有運氣:從字符串中提取操作數和操作符

public static String removeIs(String input) 
{ 
    //String check = input.replaceAll("[^/+/-/*//^0-9/-]+", " "); 
    String check = input.replaceAll("[^-+*/^0-9/-](?![^(]*\\))"," "); 
    return check; 
} 
+0

我認爲你應該檢查'如何評估在java中綴表達式' 鏈接:http://stackoverflow.com/questions/7185589/how-to-calculate-expression-in-java – Arpit 2013-02-23 09:50:05

+1

什麼是'I10I20I-3 ++'?它只是一個測試字符串?你是什​​麼意思,應該給我27''? – Wookie88 2013-02-23 09:54:21

+0

@ Wookie88 - 它是一個計算器表達式,其中操作數由'I'分隔,操作員都在最後。 – Perception 2013-02-23 09:58:05

回答

1

尋找任何非運營商非數字字符的表達式爲:

[^0-9+\-\*\/]

你在Q下面的評論說,你正在寫計算器。請注意,您的字符串中的數字和運算符數量未知,所以最好是循環遍歷字符串並手動獲取數字和運算符以便在計算器中使用,而不是使用正則表達式反向引用。順便說一句:你爲​​什麼用空格替換I?它對你有什麼影響什麼是字符串中的分隔符?

不久前,我已經創建了一個相當先進的基於正則表達式的JS代碼解析器,從這個經驗我可以告訴創建一個,一次解析所有東西的怪異表達式通常是不好的主意。