罗马数字的字符串替换

时间:2016-11-15 14:44:33

标签: java regex roman-numerals mvel

我正在获得用户输入,如下所示。

“两个ix都是viii是罗马数字。 mcmlxxxvii是哇年。 年是mmxvi。“

我必须搜索i / p中存在的所有罗马数字并将其转换为大写。所以我想使用下面的字符串替换,其中xxx是一个罗马数字。

input.replaceAll("(?i)xxx","XXX");

目前,我可以检查输入是否有。

System.out.println(input.matches("^.*M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3}).*$"));

帮助我。

1 个答案:

答案 0 :(得分:0)

试试这个:

\U\1 will not work in java though,but the following code will

并替换为:

final String regex = "(?!\\bi+\\b)\\b[dcmlxvi]+\\b|(\\bi+\\.)";
String string = "i i Both ix is viii are roman numeral. mcmlxxxvii is wow year. Year is mmxvi. i i I i i i i am good";
String tmp;
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    tmp=matcher.group(0).toUpperCase();
    string=string.replace(matcher.group(0),tmp);
}

System.out.println(string);

Explanation

java code sample:

d3.json("data.json", function (error, data) {
    console.log(d3.values(data));  // do this as a check
     for (var d in data) {
            d.nodes = +d.nodes;
            d.links = +d.links;
            d.types = +d.types;
        }
    // svg can go here
})