练习题:
生活中会遇到阿拉伯数字转化成对应的大写中文汉字的形式,请用程序实现一个从键盘录入一串数字,要求将输入的阿拉伯数字转成对应的大写中文汉字。
分析:
创建两个数组,分别用来装对应的阿拉伯数字转化成对应的大写中文汉字的形式,和金额的单位。
键盘录入一串数字,并把字符串分为小数点前和小数点后的数,通过小数点前的下标长度判断这个数是什么位级的数(因为是通过小数点分割两段数字,所以要判断小数点是否存在,如果不存在可以补上一个“.00”)。
然后把里面的数字放入一个长度为七数组中(因为最高位是万,且不需要小数点),放入数组可以通过小数点的下标知道小数点前一位是个位,而个位对应的下标我们可以规定位4(因为不能确定输入的是金额具体是多少,且不清楚小数点后是否有小数,例如23.2,只有一位,所以通过小数点的下标来确定每个数字应该放在数组的什么位置)这个是为了方便对应金额的单位。
最后定义一个方法用来转换阿拉伯数字,应为数组的长度为7,所以数组中可能会有值为零的而不是字符‘0’(可以通过在创建数组赋值提前解决),需要判断值为零就返回一个”零“字符串。剩下的可以通过计算把char类型的数据减去字符零‘0’,然后使用int类型的变量接收获得大写中文数字的下标。
代码实现:
public class StringTest1 {
public static void main(String[] args) {
char[] shu = {'万', '千', '百', '十','元','毛','分'};
Scanner sc = new Scanner(System.in);
String next = sc.next();
//因为是通过小数点分割两段数字,所以要判断小数点是否存在
if (!next.contains(".")) {
next = next + ".00";
}
int i = next.indexOf(".");
char[] s = next.toCharArray();
//创建一个新数组用来装数字(作用:用来剔除小数点)
char[] s1 = new char[7];
//该循环的作用:把小数点前的数放入新数组中(从个位开始放入,下标4是个位)
int count = 4;
for (int j = i; j > 0; j--) {
s1[count] = s[j - 1];
count--;
}
//该循环的作用:把小数点后的数放入新数组中(从小数点的后第一个数开始放入)
count = 5;
for (int j = i; j < s1.length; j++) {
if (count <= 6 && (j + 1) < s.length) {
s1[count] = s[j + 1];
count++;
}
}
for (int j = 0; j < s1.length; j++) {
System.out.print(add(s1[j]) + shu[j] + " ");
}
}
//用于转换的方法
public static String add(char c) {
//壹、贰、叁、肆、伍、陆、柒、捌、玖
String[] a = {"零", "壹", "贰", "叁","肆","伍","陆","柒","捌","玖"};
if (c == 0) {
return "零";
}
int a1 = c - '0';
return a[a1];
}
}
运行结构: