/*
*需求:25、金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
思路:1 用字符串类型接收用户输入,并转为char数组,对每个数字单独处理;
2 用两个表来处理数字,一个为基础的汉子数字表示表,一个为金钱的进制表
3 对零进行特殊处理
*/
package Test;
import java.util.Scanner;
public class MoneyTransform {
public static void main(String[] args) {
getMoney1();
}
public static void getMoney1()
{
StringBuilder sb=new StringBuilder();
Scanner sc =new Scanner(System.in);
System.out.println("请输入要转换的金额:");
String money=sc.nextLine().trim();//由于用户的数字输入不确定,用字符串接收
char[] ch=money.toCharArray();
char[] base={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
char[] ch1={' ','拾','佰','仟','万','拾','佰','仟','亿'};
for (int i = 0; i < ch.length; i++) {
int idx=Integer.parseInt(new Character(ch[i]).toString());//获取每个数字,以便通过基础表得到汉子表示
int id=(ch.length-1-i)/9==0?(ch.length-1-i):(ch.length-1-i)%9+1;//得到金额进制的匹配索引
if(idx!=0)//对数字不是零的直接添加到字符串里
{
sb.append(base[idx]);
sb.append(ch1[id]);
}
else
{
if(id==3||id==7)//千位为零继续循环,不打印
continue;
else if(id==4||id==8)//万,亿位是零
{
if(ch[i-1]=='0'&&ch[i-2]=='0'&&ch[i-2]=='0')//若万亿位前三位都是零,则打印零
{
sb.append(base[idx]);
}
else//否则打印万,亿
sb.append(ch1[id]);
}
else if(id==2||id==6)//百位是零
{
if(ch[i-1]!='0'&&ch[i+1]!='0')//若千位与十位不为零,则打印零
{
sb.append(base[idx]);
}
}
else if(id==1||id==5)//十位为零
{
if(ch[i+1]!='0')//若百位为零就打印零
{
sb.append(base[idx]);
}
}
}
}
sb.append("圆整");
String str=sb.toString().replace(" ", "");
System.out.println(str);
} |