2016-08-19 33 views
-1

ローマ数字を整数に変換するプログラムを書いています。私がやっている方法は、減算(IXCMXC)を意味し、それぞれの量を集計に加えるサブストリングを探しています。たとえば、CMが文字列MMMMCMXCIXにある場合は、数百の列を9に設定します。Java正規表現の部分文字列を見つける

私は

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)リテラル部分文字列を置換するには' replaceAll'ではなく 'String#replace'を使用します。 –

答えて

0

String#matchesあなたString値のみ"CM"で構成されていない限り、あなたの条件がトリガされません理由は、あなたのサブストリングに対して全体Stringと一致します。

いずれか:

  1. 使用String#contains(NO正規表現):

    例えばif(romanNum.contains("CM"))

  2. または、明示的Patternに対してMatcherを使用:

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

    実際のパターンがない限り、これは意味をなさないことに注意してください。

最後に、あなたはおそらく、あなたがリテラルだけを交換している場合replaceの代わりreplaceAllを使用します。

関連する問題