Java实现将小写的整数金额转换成为大写的金额并进行打印输出
1.说明
输入一个整数金额,将整数金额转换成为大写的金额输出
例如:
- 8888 -> 零佰零拾零万捌仟捌佰捌拾捌
实现思路
首先,我们可以现进行一下题目的分析:
需求关键字:小写、转换、大写
将最终需要实现的效果与需要转换的对象作比较,经过逆推我们发现,转换后的结果想要变回被转换的对象,需要经过去单位、去零、转换这三个步骤,那么将被转换对象转换为实现结果,就只需要经过转换、补零、添加单位四步。
2.代码实现
1.将小写金额转换为大写金额
- 录入金额
System.out.println("请输入整数金额:");
StringBean digital = new StringBean();
int amount;
while (true) {
digital.setDigital();
amount = digital.getDigital();
if (amount >= 0 && amount <= 9999999) {
break;
} else {
System.out.println("请输入正确的金额:");
}
}
- 创建一个用来存储大写字符的数组
//创建大写数组
public static char[] getCapitals() {
char[] CapitalsArray = {'零','壹', '贰', '叁', '肆','伍', '陆', '柒', '捌', '玖'};
return CapitalsArray;
}
- 提取金额里面的每一位数字
//获取金额里的每位数字
public static int[] getDigital(int amount) {
int length = 0;
int tmp = amount;
while (true) {
if (tmp == 0) {
break;
}
tmp = tmp/ 10;
length++;
}
int[] digitalArr = new int[length];
for (int i = digitalArr.length - 1; i >= 0; i--) {
if (amount == 0) {
break;
}
//取个位
digitalArr[i] = amount % 10;
//减去一位数
amount /= 10;
}
return digitalArr;
}
- 提取出来的数字作为索引,找到大写字符数组中的对应元素并进行拼接
//将数字转换成为大写
public static String getCap(int[] arr,char[] array){
String ss = "";
int count = 7 - arr.length;
char[] Cap = new char[7];
for (int i = 0; i < arr.length; i++) {
Cap[i] = array[arr[i]];
ss = ss + Cap[i];
}
//补零
for (int i = 0; i < count; i++) {
ss = '零' + ss;
}
return ss;
}
2.拼接单位
- 创建单位数组
//创建单位数组
public static char[] getUnitArr() {
char[] UnitArray = {'佰', '拾', '万', '仟', '佰', '拾', '元'};
return UnitArray;
}
- 拼接单位进入字符串中
//拼接单位
public static String getAddUnit(String str,char[] array){
//遍历字符串获得值
String ss = "";
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
ss = ss + ch + array[i];
}
return ss;
}
3.完整代码
package com.java.StringTest;
//Author:@Yh
/**
* 输入一个整数金额,将整数金额转换成为大写的金额输出
* 例如:8888 -> 零佰零拾零万捌仟捌佰捌拾捌
*/
public class AmountJdut {
public static void main(String[] args) {
//键盘录入整数金额
System.out.println("请输入整数金额:");
StringBean digital = new StringBean();
int amount;
while (true) {
digital.setDigital();
amount = digital.getDigital();
if (amount >= 0 && amount <= 9999999) {
break;
} else {
System.out.println("请输入正确的金额:");
}
}
//获取金额里的每一位数字并替换成大写,然后补齐位数后返回一个String类型的金额
String Cap = getCap(getDigital(amount),getCapitals());
//拼接单位
System.out.println(getAddUnit(Cap,getUnitArr()));
}
//创建大写数组
public static char[] getCapitals() {
char[] CapitalsArray = {'零','壹', '贰', '叁', '肆','伍', '陆', '柒', '捌', '玖'};
return CapitalsArray;
}
//获取金额里的每位数字
public static int[] getDigital(int amount) {
int length = 0;
int tmp = amount;
while (true) {
if (tmp == 0) {
break;
}
tmp = tmp/ 10;
length++;
}
int[] digitalArr = new int[length];
for (int i = digitalArr.length - 1; i >= 0; i--) {
if (amount == 0) {
break;
}
//取个位
digitalArr[i] = amount % 10;
//减去一位数
amount /= 10;
}
return digitalArr;
}
//将数字转换成为大写
public static String getCap(int[] arr,char[] array){
String ss = "";
int count = 7 - arr.length;
char[] Cap = new char[7];
for (int i = 0; i < arr.length; i++) {
Cap[i] = array[arr[i]];
ss = ss + Cap[i];
}
//补零
for (int i = 0; i < count; i++) {
ss = '零' + ss;
}
return ss;
}
//创建单位数组
public static char[] getUnitArr() {
char[] UnitArray = {'佰', '拾', '万', '仟', '佰', '拾', '元'};
return UnitArray;
}
//拼接单位
public static String getAddUnit(String str,char[] array){
//遍历字符串获得值
String ss = "";
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
ss = ss + ch + array[i];
}
return ss;
}
}
运行结果: