package com.itheima;
/**
* 第十题:
* 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
* @author Frank
*
*/
public class Test10 {
public static void main(String[] args){
long number = 1210000142;
System.out.println("原始数字:" + number);
String chinaNumber = convertChinaNumber(Long.toString(number));
System.out.println(" 转换后:" + chinaNumber);
}
public static String convertChinaNumber(String number){
//定义字符数组存储中国数字写法格式
final char[] chineseNumber = new char[]
{ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
//定义字符数组存储中国数字的单位
final char[] units = new char[]
{ '圆', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'};
//定义字符数组接收输入的数字
char[] chrNumber = number.toCharArray();
int[] intNumber = new int[chrNumber.length]; //将字符数组转成整型数组
changInt(chrNumber,intNumber);
StringBuffer sb = new StringBuffer(); //用于存储转换后的字符串
for(int i = 0; i < chrNumber.length; i++){
if(intNumber[i] == 0 && i==0){ //判断如果个位上的数字为0添加圆
sb.append(units[intNumber[i]]);
}
if(intNumber[i] == 0 && i!= 0){ //判断除了个位数其他位数为0则添加零
sb.append(chineseNumber[0]);
//如果万位前后都是零,这里把万字添加,否则会少了万
if(i==4){
sb.append(units[i]);
}
//如果亿位前后都是零,这里把亿字添加
if(i== 8){
sb.append(units[i]);
}
}
if(intNumber[i] != 0){ //判断如果位数上不是零,按照定义的中文字典对应添加到字符串中
sb.append(units[i]); //添加单位
sb.append(chineseNumber[intNumber[i]]); //添加数字格式
}
}
sb.reverse(); //将字符串反转
//将对于的零去除
String chinaNumber = sb.toString().replaceAll("零+", "零").replaceAll("零+万", "万")
.replaceAll("零+亿", "亿").replaceAll("亿万零", "亿零")+"整";
return chinaNumber;
}
/**
* 转换成整型数组
* @param chrNumber
* @param intNumber
*/
public static void changInt(char[] chrNumber,int[] intNumber){
for(int k = chrNumber.length-1,j=0;k >= 0; k--,j++ ){
String num = Character.toString(chrNumber[k]) ;
intNumber[j] = Integer.parseInt(num);
}
}
} |
|