黑马程序员技术交流社区
标题:
10、 金额转换,阿拉伯数字转换成中国传统形式
[打印本页]
作者:
李文思
时间:
2015-7-21 10:05
标题:
10、 金额转换,阿拉伯数字转换成中国传统形式
题目:如题
自己写的一段代码。思路并不是很清晰,期待能提供更清晰简洁的思路以及代码。
package com.itheima;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 10、 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
* 壹仟零壹拾亿零壹仟零壹拾圆整
* 答:明确我们的中国的转换方式:
* 数字有:"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
* 单位有:"圆", "拾", "佰", "仟", "万", "拾", "佰","仟", "亿", "拾", "佰", "仟"
* 利用查表法,
* 根据所得到的数字,以该数字为角标,去查数字表格,如果该数字为零,则不去查单位。以该数字所在的角标位,去查单位表格。
* 由于在数字中得到的第一个数字是金额的最高位,所以我们将数字字符反转
* 如果是0、4、8角标位的单位,无论该数字是否为零,都必须有单位
* 最后以一定的规则对得到的中文金额进行处理.
* 本程序只能转1-12位的阿位伯整数。键盘输入要转换的数字金额,输入over结束转换
*
* @author liwensi
*
* */
public class Test10 {
public static void main(String[] args) {
//调用inpuKey方法,从键盘接收要转换的数字
try {
inputKey();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void inputKey () throws IOException {
//建立转换工具的对象
ConversionTool ct = new ConversionTool();
//接收键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bufr.readLine()) != null) {
//如果输入"over",则结束键盘录入
if (line.equals("over"))
System.exit(0);
//全是数字才转换。
if (line.matches("\\d{1,12}"))
System.out.println(ct.conversion(line));
else
System.out.println("请输入1到12位数字");
}
}
}
/**
* 定义一个数字金额转换成中文金额的工具*/
class ConversionTool {
//将数字金额转换成中文金额
public String conversion(String str) {
//创建两个容器用于存储阿拉伯金额,跟中文金额
StringBuilder sb = new StringBuilder(str);
StringBuilder newSb = new StringBuilder();
//对数据进行反转,以便查表。
sb.reverse();
//从零角标开始,对sb容器中的元素进行操作。
for(int x = 0 ; x < sb.length() ; x++) {
//获取该角标对应数字然后查表获取对应的中文数字
int num = Integer.parseInt(sb.charAt(x) +"");
//用该数字查表,获取中文表现形式
String chNum = searchNumber(num);
//如果该角标位是0、4、8,则一定要获取单位,否则再判断num不等于零才获取单位
String unit = "";
if ((x % 4) == 0) {
unit = searchUnit(x);
} else if (num != 0) {
unit = searchUnit(x);
}
//将得到的第一位数字的中文表现形式插入newSb中的开头位置
newSb.insert(0, chNum + unit);
}
newSb.append("整");
String ch = newSb.toString();
//去除重复的多个零
ch = ch.replaceAll("(零)+", "$1");
//零后面不可以跟圆,万,亿
ch = ch.replaceAll("零([圆万亿])", "$1");
//亿后面不可以跟万
ch = ch.replaceAll("(亿)万", "$1");
return ch;
}
public String searchNumber(int num) {
String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return arr[num];
}
public String searchUnit(int x) {
String[] arr = {"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};
return arr[x];
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2