2016-08-19 71 views
-1

我正在編寫一個程序將羅馬數字轉換爲整數。我做的方法是尋找一個子字符串,將意味着減法(IXCMXC)並添加相應的金額到理貨。例如,如果CM在字符串MMMMCMXCIX中,則將數百列設置爲9Java正則表達式查找子字符串

我試圖用

if(romanNum.matches("CM")){ 
     hundreds = 9; 
     romanNum.replaceAll("CM", ""); 
    } 

做到這一點,但它從未進入if語句。使用thesetwo正則表達式跳棋以字符串MMMMCMXCIX和正則表達式僅作爲CM他們都強調比賽還沒有我的代碼,否則建議。爲什麼是這樣?

+0

'Matcher.matches()'檢查**所有輸入**相匹配的圖案的,換句話說,它僅匹配,如果輸入是恰好'CM'而不是如果它是'MMMMCMXCIX'。改用其他方法,例如['Matcher.find()'](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#find--)。 – Jesper

+0

代碼有幾個問題。 1)使用'contains'來檢查一個字符串是否包含一個子字符串,2)將替換後的值賦給一個變量,3)用'String#replace'替換原義字符串,而不是'replaceAll'。 –

回答

0

String#matches與您的子字符串匹配整個String,這就是爲什麼您的條件永遠不會觸發,除非您的String值只包含在"CM"中。

或者:

  1. 使用String#contains(沒有正則表達式):

    例如if(romanNum.contains("CM"))

  2. ,或者使用Matcher針對Pattern明確:

    例如if (Pattern.compile("CM").matcher(romanNum).find())

    注意,這沒有任何意義的是(最好的解決方案1),除非你有一個實際的模式。

最後,你可能想使用replace而不是replaceAll,如果你只是更換文字。

相關問題