题目:如题
自己写的一段代码。思路并不是很清晰,期待能提供更清晰简洁的思路以及代码。
- 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];
- }
- }
复制代码
|
|