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("非法字符,请输入数字!");
}
}
}
}