Java 数字转换成罗马字

Converter .java

package main;

/**
 * @author cm_wang
 *
 * 转换工具类
 */
public class Converter {

    public static final String[][] str = {  
            {"","I","II","III","IV","V","VI","VII","VIII","IX"},  // 个位数举例
            {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},  // 十位数举例
            {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},  // 百位数举例
            {"","M","MM","MMM"}  // 千位数举例
    };  


    /**
     * @param nubmer
     * @return
     * 
     * 思路是:千位先除以1000然后模10,百位先除以100然后模10,十位先除以10然后模10,个位直接模10.
     */
    public static String convert(String strNubmer) {
        StringBuilder strBuilder = new StringBuilder();
        int number = Integer.parseInt(strNubmer);

        strBuilder.append(str[3][number/1000%10]);  
        strBuilder.append(str[2][number/100%10]);  
        strBuilder.append(str[1][number/10%10]);  
        strBuilder.append(str[0][number%10]); 
        return strBuilder.toString();
    } 
}

InputHelper.java

package main;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * @author cm_wang
 *
 * 过滤工具类
 */
public class InputHelper {

    /**
     * @param str
     * @return 过滤后的数字
     * 
     * 过滤掉除了数字以外的所有非法字符。
     */
    public static String getNumber(String str) {

        String regEx = "[^0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }
}

Roman.java

package main;
import static main.Converter.*;
import static main.InputHelper.*;

import java.util.Scanner;

/**
 * @author cm_wang
 *
 * main class.
 */
public class Roman {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {

        while(true){
            System.out.println();  
            System.out.print("请输入0~3999的阿拉伯数字:");  
            Scanner sc = new Scanner(System.in);
            String str = getNumber(sc.nextLine());

            try {
                System.out.println("转换后的罗马数字为:" + convert(str));  
            }catch(Exception e) {
                System.out.println("非法字符,请输入数字!");  
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/80776303