在日常需求中,常常会将数字转换为另外一种形式,如阿拉伯数字转中文的,或者是转成支票中出现的中文数字,还有转成英语的,其实原理都大同小异,本次的需求是,是将用户输入的阿拉伯数字转换为罗马数字(长度不能超过10),有一点注意的是,罗马数字没有零!,遇到零则用空格代替!
1.判断用户输入是不是数字,不是则提示,并重新输入
public static boolean ifNotNum(String str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9') {
System.out.println("有字符不在0-9的范围,请重新输入!");
return true;
}
}
return false;
}
2.判断输入的长度不能超过10
public static boolean ifOver(String str) {
if(str.length()>10){
System.out.println("您输入的字符超过最大长度!请重新输入!");
return true;
}
else
return false;
}
3.核心代码:转换为罗马数字
public static String turnToRome(String str){
String[] arr = new String[]{"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
// StringBuilder sb = new StringBuilder(str);
StringBuilder sb = new StringBuilder();
int num = 0;
for (int i = 0; i < str.length(); i++) {
// System.out.println(str.charAt(i));
num = str.charAt(i) - '0';//因为里面存的是字符串的数字,在赋值给整形类型的变量时
//会将其对应ASCII码进行转换,所以可以将原数据减掉一个'0'字符,则可以获得我们对应的整形数值
sb.append(arr[num]);//在容器中直接添加可以减少字符串的创建减少,内存占用,提高效率
}
return sb.toString();
}
完整代码如下:
import java.util.Scanner;
import java.util.StringJoiner;
public class toRome {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("请输入长度小于10的数字!");
boolean flag = true;
String str1 = "";
while (flag) {
str1 = sc.next();
if(!ifOver(str1)){
flag = ifNotNum(str1);
}
}
str1 = turnToRome(str1);
System.out.println(str1);
}
public static boolean ifOver(String str) {
if(str.length()>10){
System.out.println("您输入的字符超过最大长度!请重新输入!");
return true;
}
else
return false;
}
public static boolean ifNotNum(String str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9') {
System.out.println("有字符不在0-9的范围,请重新输入!");
return true;
}
}
return false;
}
public static String turnToRome(String str){
String[] arr = new String[]{"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
// StringBuilder sb = new StringBuilder(str);
StringBuilder sb = new StringBuilder();
int num = 0;
for (int i = 0; i < str.length(); i++) {
// System.out.println(str.charAt(i));
num = str.charAt(i) - '0';
sb.append(arr[num]);
}
return sb.toString();
}
}
效果图如下: