实现的功能是将数字“673”转换成“陆佰柒拾叁” “3681”转换成“叁仟陆佰捌拾壹” “8007”转换成“捌仟零柒”
主要使用了数组和循环来实现
代码雏形
package com.test.array; public class Num2RMB2 { private static String[] han = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; //准备转换的汉字 private String[] unit = { "万" , "仟" , "佰" , "拾" ,"个"}; //准备单位 private String Num2Rmb(String str){ int strLength = str.length(); //首先先获得传入字符串的长度 String n = ""; //定义一个空字符串,用来接收最后形成的结果 /** * 因为不确定要输入的数字是多少位,所以从后往前开始转换 * <1>数字的长度为strLength,所以从第strLength-1位(也就是从最小一位)开始转换 * <2>str.charAt函数可以获得字符串索引处的char值,然后再减去48,将该char转换为数字 * <3>因为个位数是不需要单位的,需要用i!=strLength-1来做判断,如果是最后一位,则不加单位 * <4>最后再将转换后的数字添加上单位连接起来 */ for(int i=strLength-1;i>=0;i--){ //<1> int index = str.charAt(i)-48; //<2> if(i!=strLength-1){ //<3> n = han[index]+ unit[i] + n ; //<4> }else{ n = han[index]+ n ; } } return n; } public static void main(String[] args) { Num2RMB2 num2rmb = new Num2RMB2(); String daxie = num2rmb.Num2Rmb("56089"); System.out.println(daxie); } }
上面的代码还存在问题,例如这样的数字“10256” 则会转换成“壹万零仟贰佰伍拾陆”,所以这时候还需要在转换的时候做一个判断,如果该处的数字为0,也不加单位
所以上面的代码修改为
package com.test.array; public class Num2RMB2 { private static String[] han = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; //准备转换的汉字 private String[] unit = { "万" , "仟" , "佰" , "拾" }; //准备单位 private String Num2Rmb(String str){ int strLength = str.length(); //首先先获得传入字符串的长度 String n = ""; //定义一个空字符串,用来接收最后形成的结果 /** * 因为不确定要输入的数字是多少位,所以从后往前开始转换 * <1>数字的长度为strLength,所以从第strLength-1位(也就是从最小一位)开始转换 * <2>str.charAt函数可以获得字符串索引处的char值,然后再减去48,将该char转换为数字 * <3>因为个位数是不需要单位的,需要用i!=strLength-1来做判断,如果是最后一位,则不加单位 * <4>最后再将转换后的数字添加上单位连接起来 */ for(int i=strLength-1;i>=0;i--){ //<1> int index = str.charAt(i)-48; //<2> if(i!=strLength-1 && index!=0){ //<3> n = han[index]+ unit[i] + n ; //<4> }else{ n = han[index]+ n ; } } return n; } public static void main(String[] args) { Num2RMB2 num2rmb = new Num2RMB2(); String daxie = num2rmb.Num2Rmb("56089"); System.out.println(daxie); } }
这个时候基本上就已经差不多了,但是还存在问题,加入说数字为“50089” 则会转换成 “伍万零零捌拾玖”
所以说还需要做判断(待续)