这个题目我在网上看到有好多种做法,我自己也想出了一种做法;不过因为时间不够,只能转换整数,没把角分弄进去。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * 思路: * 1.定义两张表,存储中文数字和货币单位。 * 2.键盘录入使用IO流的BufferedReader进行接收键盘录入。 * 3.把录入的阿拉伯数字弄成字符数组,把每个数字所在位置的角标对着中文数字的表进行转换, * 转换完后再从对应的位置插入货币单位。 * 4.把格式进行修正匹配后打印输出。 */ public class MoneyConvert { public static void main(String[] args) { //创建中文大写数字的表和货币单位的表 String[] cnNum = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒","捌", "玖"}; String[] unit = {"", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"}; System.out.println("请输入金额:"); //创建流对象,用于接收键盘录入的数据 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { //把键盘接收的数据打散成字符数组 char[] chNumArr = in.readLine().toCharArray(); //把阿拉伯数字转换为中文的大写数字 String[] convertNum = new String[chNumArr.length]; for(int x = 0; x < chNumArr.length; x++) { int num = Integer.parseInt(chNumArr[x]+""); convertNum[x] = cnNum[num]; } //嵌入货币单位到转换好的中文大写数字里去 StringBuilder container = new StringBuilder("圆整"); for(int x = convertNum.length -1, y = 0; x >=0; x--, y++) { String num = convertNum[x]; if(num.equals("零")) { //判断数位是否是仟万亿的位置,是则插入单位 if(y == 4 || y == 8) container.insert(0, num+unit[y]); else container.insert(0, num); } else { container.insert(0, num+unit[y]); } } //格式修正 String put = container.toString(); put = put.replaceAll("佰零+万", "佰万"); put = put.replaceAll("佰零+亿", "佰亿"); put = put.replaceAll("仟零+万", "仟万"); put = put.replaceAll("仟零+亿", "仟亿"); put = put.replaceAll("零+", "零"); put = put.replaceAll("零万", "零"); put = put.replaceAll("拾零", "拾"); put = put.replaceAll("零圆", "圆"); //完成后打印输出 System.out.println("该金额的大写形式为:"+put); } catch (IOException e) { e.printStackTrace(); } //因为是键盘录入,接收完数据后流会自然断开了,所以无需调用关流资源的方法了 } }
还在学习中,写得可能不太好。
时间: 2024-12-28 01:12:24