我正在编写一个将罗马数字转换为整数的程序。我正在做的方法是寻找一个子字符串,它表示减法(IX
,CM
,XC
)并将相应的数量加到计数器上。例如,如果CM
位于字符串MMMMCMXCIX
中,则将数百列设置为9
。
我正在尝试用
做 if(romanNum.matches("CM")){
hundreds = 9;
romanNum.replaceAll("CM", "");
}
但它永远不会进入if语句。将these two正则表达式检查器与字符串MMMMCMXCIX
和正则表达式仅用作CM
,它们都突出显示匹配,但我的代码建议不然。这是为什么?
答案 0 :(得分:0)
String#matches
会针对您的子字符串匹配整个String
,这就是为什么您的条件永远不会触发,除非您的String
值仅包含在"CM"
中。
要么:
使用String#contains
(没有正则表达式):
e.g。 if(romanNum.contains("CM"))
或明确对Matcher
使用Pattern
:
e.g。 if (Pattern.compile("CM").matcher(romanNum).find())
请注意,除非您有实际模式,否则这样做并不合适(首选解决方案1)。
最后,如果您只是替换文字,则可能需要使用replace
而不是replaceAll
。