- public class Test10 {
- /**
- * @param args
- *
- * 第10题: 金额转换,阿拉伯数字转换成中国传统形式。
- * 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
- */
- public static void main(String[] args) {
- long money = 101000001010L;
- // long money = 111001001110L;
- System.out.println("转换为中国汉字形式之前:"+money);
- System.out.println("转换为中国汉字形式之后:"+convert(money));
- }
- public static String convert(long money) {
- String str = Long.toString(money);
- // 将字符串数字替换成中文数字
- char[] num = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
- char[] cnNum = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
- for (int i = 0; i < 10; i++) {
- str = str.replace(num[i], cnNum[i]);
- }
- // StringBuilder存放字符串,用于插入删除操作
- StringBuilder chinese = new StringBuilder(str);
- // 从第index个字符从后往前开始操作,操作一次,index--
- int index = str.length() - 1;
- // 存放金额单位
- String[] unit = { "", "拾", "佰", "仟" };
- String[] unit4 = { "万", "亿" };
- // 判断前一个数是否为零的标记
- boolean flag = false;
- // 循环体内对chinese进行操作
- for (int i = 0; i < str.length(); i++) {
- // 每4位插入万,每8位插入亿,最低位先不设置单位
- if (i % 4 == 0 && i != 0) {
- // 单位万前面为4个零时,不插入万,并将index位置(最低位)的零删除
- if ((i / 4 - 1) % 2 == 0 && index >= 3
- && str.substring(index - 3, index + 1).equals("零零零零")) {
- chinese.deleteCharAt(index);
- index--;
- continue;
- }
- // 否则在index+1位置插入相应的单位:万、亿
- chinese.insert(index + 1, unit4[(i / 4 - 1) % 2]);
- }
- // 如果4位的最低位为零,删除最低位的零,将零标志置为true
- if (i % 4 == 0 && str.charAt(index) == '零') {
- chinese.deleteCharAt(index);
- flag = true;
- index--;
- continue;
- }
- // 如果前一位为零并且这一位也为零,删除这一位的零
- if (flag && str.charAt(index) == '零') {
- chinese.deleteCharAt(index);
- index--;
- continue;
- }
- // 如果当前位为零,将零标志置为true
- if (str.charAt(index) == '零') {
- flag = true;
- index--;
- continue;
- }
- // 当前位不为零,将零标志位置为false,插入金额单位
- flag = false;
- chinese.insert(index + 1, unit[i % 4]);
- index--;
- }
- // 完善金额表示形式
- chinese.append("圆整");
- return chinese.toString();
- }
- }
复制代码 |