A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑飞 高级黑马   /  2014-9-29 23:59  /  1547 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑飞 于 2014-10-1 01:12 编辑

刚开始写个大概,运行下,越界了,看不懂为啥,上代码:
  1. /**
  2. * 金额转换,阿拉伯数字转换成中国传统形式。
  3. * 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  4. * 萬仟佰拾个圆整
  5. */
  6. class Test
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 StringBuilder src = new StringBuilder();
  11.                 StringBuilder dest = new StringBuilder();
  12.                 src.append("101000001010");//初始化src
  13.                 System.out.println("src初始化完成:"+src);
  14.                
  15.                 toRmb(src,dest);//调用方法将最终数据存入dest;
  16.                 System.out.println(dest);
  17.         }
  18.         
  19.         public static void toRmb(StringBuilder src,StringBuilder desc)//每次截取8为,转中文,从src中移除,循环到src==null;
  20.         {
  21.                 StringBuilder temp = new StringBuilder();//临时存放8位数中文;
  22.                
  23.                 while(src!=null)
  24.                 {
  25.                         if(src.length()<=8)
  26.                         {
  27.                                 temp.append(src);//倒入
  28.                                 System.out.println("if temp:"+temp);
  29.                                 System.out.println("if src:"+src);
  30.                                 
  31.                                 toChinese(temp,desc);
  32.                                 break;
  33.                         }
  34.                         
  35.                         temp.append(src.substring(src.length()-8));//倒入
  36.                         src.delete(src.length()-8, src.length());//倒出
  37.                         toChinese(temp,desc);
  38.                         temp.delete(0, temp.length());//清空
  39.                 }
  40.         }
  41.         
  42.         public static void toChinese(StringBuilder temp,StringBuilder desc)
  43.         {
  44.                 //定义表格
  45.                 char[] nums = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};//数字转中文
  46.                 String[] units = {"拾","佰","仟","萬","拾萬","佰萬","仟萬","亿"};//单位
  47.                 char[] chs = temp.reverse().toString().toCharArray();//反转,转字符数组
  48.                 for(int i = 0; i < chs.length; i++)
  49.                 {
  50.                         int num = chs[i];
  51.                         desc.append(nums[num]);
  52.                         desc.append(units[i]);
  53.                 }
  54.         }
  55. }
复制代码
上面这段是改通了 就实现了粗糙的中文打印,没啥用;最后能用的代码放在10楼了;






评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

12 个回复

倒序浏览
char没转换成int类型
回复 使用道具 举报
戏言丶 发表于 2014-9-30 01:11
char没转换成int类型

....好像不是啊 我试过用int 一样结果 我再看看
回复 使用道具 举报
char[] chs = temp.reverse().toString().toCharArray();
int num = chs[i];得到的是ASCII码
回复 使用道具 举报
戏言丶 发表于 2014-9-30 01:34
char[] chs = temp.reverse().toString().toCharArray();
int num = chs;得到的是ASCII码

呵呵 谢谢
大脑短路了 一直没看出来;P
回复 使用道具 举报
郑飞 发表于 2014-9-30 02:46
呵呵 谢谢
大脑短路了 一直没看出来

大哥加油! 不过3am是不是有点晚啊,注意身体呀。
回复 使用道具 举报
我还没看那么远
回复 使用道具 举报
郑飞 高级黑马 2014-9-30 16:50:19
8#
JerryJava 发表于 2014-9-30 06:15
大哥加油! 不过3am是不是有点晚啊,注意身体呀。

嗯 给测试题改注释什么的 搞得晚了点:handshake
回复 使用道具 举报
郑飞 高级黑马 2014-9-30 16:55:54
9#

不远啊 就是操作字符串 可能用replace比较合适
回复 使用道具 举报
最好放弃了上面这种想法 改成下面的代码了:D
  1. class Test
  2. {
  3.                 public static void main(String[] args)
  4.                 {
  5.                         //1.初始化
  6.                         char[] nums = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};//中文数字;
  7.                         String[] units = {"仟","佰","拾","萬","亿"};//中文单位;
  8.                         StringBuilder sb = new StringBuilder();//用于存放过度字符串;
  9.                         String moneyStr = "101000001010";//初始化数字字符串;
  10.                         System.out.println("数字格式:"+moneyStr);
  11.                         
  12.                         //2.简单处理,去头上的0;
  13.                         while(moneyStr.startsWith("0"))//去除头部的0;
  14.                                 moneyStr = moneyStr.substring(1);//截取,除了第一位.
  15.                         
  16.                         //3.转字符数组,为中间处理做准备;
  17.                         char[] money = moneyStr.toCharArray();//数字字符串转成数字字符数组;
  18.                         
  19.                         //4.把数字字符数组翻译成中文+单位;
  20.                         for(int i = 0; i<money.length; i++)
  21.                         {
  22.                                 //以下4句在对每一个中文数字做角标,用于配对各自的单位;
  23.                                 int num = Integer.valueOf(String.valueOf(money[i]));//money中的字符转成整数int;
  24.                                 int toEnd = money.length-i;//从个位数过来第几位;
  25.                                 int index = toEnd%4==0&&toEnd!=0?1:5-toEnd%4;//分成4位一份以后,该整数位当前这份中的位置数;
  26.                                 index = toEnd%8==1?5:index;//给亿单位分配特殊index标记
  27.                                 
  28.                                 sb.append(Character.toString(nums[num])+units[index-1]);//翻译成半成品中文:数字+单位;
  29.                         }
  30.                         //5.半成品传入最后处理的方法,进行处理并打印最后结果;
  31.                         regex(sb.toString());
  32.                         
  33.                 }
  34.                
  35.                 public static void regex(String cn)//对半成品中文格式金额做最后处理
  36.                 {
  37.                         //1.去除零后面的拾佰仟单位
  38.                         cn = cn.replaceAll("零[拾佰仟]","零");
  39.                         //按replaceAll里面顺序是,去重复零,去萬和亿前的零,该亿后面的萬位零.(不断循环知道全部改完);
  40.                         while(cn.contains("零零")||cn.contains("零萬")||cn.contains("零亿")||cn.contains("亿萬"))
  41.                                 cn = cn.replaceAll("零零","零").replaceAll("零萬", "萬").replaceAll("零亿", "亿").replaceAll("亿萬", "亿零");
  42.                         
  43.                         //2.因为萬和亿单位是按0-4-8-12这样分配的,所以最后一位要改成圆整;
  44.                         cn = cn+"mark";
  45.                         cn = cn.replaceAll("亿mark","圆整");
  46.                         
  47.                         //3.输出结果
  48.                         System.out.println("中文格式:"+cn);
  49.                 }
  50. }
复制代码
回复 使用道具 举报
哇! 看着好清晰~  谢谢楼主啦...  收藏下子~
回复 使用道具 举报
写得不错
回复 使用道具 举报
ζ_____________ 发表于 2014-9-30 18:59
哇! 看着好清晰~  谢谢楼主啦...  收藏下子~

可能index那块看起来有点费劲 将就看吧 还有就是最后优化结果这一块 不知道还有遗漏没 还得测试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马