package com.vci.rmip.code.client.codeapply.Apply410; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String res=intToRoman(1004); System.out.println("罗马数字->"+res); boolean isInterger=isRomanNumber(1004+""); int resInt=r2a(res); System.out.println("阿拉伯数字->"+resInt); } public static String intToRoman(int num) { int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; StringBuilder sb=new StringBuilder(); for(int i=0;i=values[i]){ num=num-values[i]; sb.append(romans[i]); } } return sb.toString(); } public static String intToRomans(int num) { String M[] = {"", "M", "MM", "MMM"}; String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[num%10]; } /*** * 校验是否是罗马数字 * @param s * @return */ public static boolean isRomanNumber(String s) { // 检查输入的字符串是否为空 if (s == null || s.length() == 0) { return false; } // 将输入的字符串转换为大写字母 s = s.toUpperCase(); // 返回结果 Pattern pattern = Pattern.compile("^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$"); return pattern.matcher(s ).matches(); } /** * 把罗马数字转换为阿拉伯数字 * * @param m * @return */ public static int r2a(String m) { int graph[] = new int[400]; graph['I'] = 1; graph['V'] = 5; graph['X'] = 10; graph['L'] = 50; graph['C'] = 100; graph['D'] = 500; graph['M'] = 1000; char[] num = m.toCharArray(); int sum = graph[num[0]]; for (int i = 0; i < num.length - 1; i++) { if (graph[num[i]] >= graph[num[i + 1]]) { sum += graph[num[i + 1]]; } else { sum = sum + graph[num[i + 1]] - 2 * graph[num[i]]; } } return sum; } }