Java如何将数字转换为罗马数字?

您想将数字转换为罗马数字表示形式,反之亦然。此处的解决方案是将问题解决为一元问题,其中罗马数字表示为单个元素,即“ I”字符。我们首先将数字表示为“ I”字符的重复序列。然后根据罗马数字中的下一个较大符号替换字符。

要从罗马数字转换为数字,我们需要逆转这一过程。在该过程结束时,我们将获得一个重复的“ I”字符序列。此过程返回的最终字符串的长度是罗马数字转换为数字的结果。

在下面的代码段中,我们创建两个方法。toRoman(int number)用于转换数罗马数字,并且方法toNumber(String roman)用于从罗马数字转换为数字的方法。这两种方法都利用String.replace()方法来计算转换结果。

让我们看看实际的代码。

package org.nhooo.example.lang;

public class RomanNumber {
    public static void main(String[] args) {
        for (int n = 1; n <= 4999; n++) {
            String roman = RomanNumber.toRoman(n);
            int number = RomanNumber.toNumber(roman);

            System.out.println(number + " = " + roman);
        }
    }

    private static String toRoman(int number) {
        return String.valueOf(new char[number]).replace('\0', 'I')
                .replace("IIIII", "V")
                .replace("IIII", "IV")
                .replace("VV", "X")
                .replace("VIV", "IX")
                .replace("XXXXX", "L")
                .replace("XXXX", "XL")
                .replace("LL", "C")
                .replace("LXL", "XC")
                .replace("CCCCC", "D")
                .replace("CCCC", "CD")
                .replace("DD", "M")
                .replace("DCD", "CM");
    }

    private static Integer toNumber(String roman) {
        return roman.replace("CM", "DCD")
                .replace("M", "DD")
                .replace("CD", "CCCC")
                .replace("D", "CCCCC")
                .replace("XC", "LXL")
                .replace("C", "LL")
                .replace("XL", "XXXX")
                .replace("L", "XXXXX")
                .replace("IX", "VIV")
                .replace("X", "VV")
                .replace("IV", "IIII")
                .replace("V", "IIIII").length();
    }
}

下面列出了10个转换的随机结果:

18 = XVIII
208 = CCVIII
843 = DCCCXLIII
1995 = MCMXCV
2000 = MM
2017 = MMXVII
2562 = MMDLXII
3276 = MMMCCLXXVI
4067 = MMMMLXVII
4994 = MMMMCMXCIV