相关疑难解决方法(0)

如何只使用正则表达式匹配有效的罗马数字?

考虑到我的另一个问题,我决定甚至不能创建一个匹配罗马数字的正则表达式(更不用说将生成它们的无上下文语法)

问题是只匹配有效的罗马数字.例如,990不是"XM",它是"CMXC"

我为此制作正则表达式的问题是,为了允许或不允许某些字符,我需要回顾一下.例如,让我们花费成千上万.

我可以允许M {0,2} C?M(允许900,1000,1900,2000,2900和3000).但是,如果匹配在CM上,我不能允许跟随字符为C或D(因为我已经在900).

我怎样才能在正则表达式中表达这一点?
如果它在正则表达式中根本无法表达,它是否可以在无上下文语法中表达出来?

regex roman-numerals

152
推荐指数
6
解决办法
6万
查看次数

将罗马数字转换为十进制

我设法让我的代码将大多数罗马数字转换为适当的十进制值.但它不适用于某些特殊情况.示例:XCIX= 99但我的代码打印出来109.

这是我的代码.

public static int romanConvert(String roman)
{
    int decimal = 0;

    String romanNumeral = roman.toUpperCase();
    for(int x = 0;x<romanNumeral.length();x++)
    {
        char convertToDecimal = roman.charAt(x);

        switch (convertToDecimal)
        {
        case 'M':
            decimal += 1000;
            break;

        case 'D':
            decimal += 500;
            break;

        case 'C':
            decimal += 100;
            break;

        case 'L':
            decimal += 50;
            break;

        case 'X':
            decimal += 10;
            break;

        case 'V':
            decimal += 5;
            break;

        case 'I':
            decimal += 1;
            break;
        }
    }
    if (romanNumeral.contains("IV")) …
Run Code Online (Sandbox Code Playgroud)

java

39
推荐指数
4
解决办法
9万
查看次数

标签 统计

java ×1

regex ×1

roman-numerals ×1