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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wdhm5423 中级黑马   /  2015-3-4 00:01  /  1081 人查看  /  7 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. 金额转换,阿拉伯数字转换成中国传统形式。

  2. 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整


  3. 思路:
  4. 1、每一位对应一个单位,每一个数字对应一个数字中文大写形式,可以创建字符串数组,通过位数和数字对应字符串
  5. 2、按对应关系可以得带一串读法字符串,接下来对该字符串进行删减修正。
  6. 3、得到阿拉伯数字的中国传统形式。

  7. */
  8. public class Test10 {
  9.         public static void main(String[] args) {
  10.                 Long l = 101000001010L;
  11.                 String str = l + "";// 转化为字符串
  12.                 StringBuilder sb = new StringBuilder();// 字符串缓冲区
  13.                 trans(str, sb);
  14.                 String s = sb.toString();// 转化为字符,方便替换操作

  15.                 // 对字符串进行修正
  16.                 s = s.replaceAll("零仟", "零");
  17.                 s = s.replaceAll("零佰", "零");
  18.                 s = s.replaceAll("零拾", "零");
  19.                 s = s.replaceAll("拾零", "拾");
  20.                 s = s.replaceAll("佰零{2}", "佰");
  21.                 s = s.replaceAll("仟零{3}", "仟");
  22.                 s = s.replaceAll("亿零{4}万零{4}", "亿");
  23.                 s = s.replaceAll("万零{4}", "万");
  24.                 s = s.replaceAll("亿零{4}万", "亿零");
  25.                 s = s.replaceAll("零+", "零");
  26.                 System.out.println(s);

  27.         }

  28.         public static void trans(String str, StringBuilder sb) {
  29.                 if ("".equals(str)) {// 判断是否已经没有数字
  30.                         return;
  31.                 }
  32.                 String[] shuzi = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };// 数字对应大写
  33.                 String[] danwei = { "圆整", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾",
  34.                                 "佰", "仟" };// 位数对应单位
  35.                 int ns = Integer.parseInt(str.charAt(0) + "");// 取字符串的第一个数
  36.                 int nd = str.length() - 1;// 由字符串的长度得到位数
  37.                 sb.append(shuzi[ns]).append(danwei[nd]);// 把数字加位数构成字符串第一个位置的读法
  38.                 str = str.substring(1);// 把已经读好的第一个位置删除
  39.                 trans(str, sb);// 递归,读接下来的字符串的第一个位置
  40.         }
  41. }
复制代码

7 个回复

正序浏览
还没学到,来看看
回复 使用道具 举报
看上去好厉害!!
回复 使用道具 举报
大爱啊:)
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-3-4 07:46:01
板凳
来学习学习。。
回复 使用道具 举报
递归貌似不是很简单啊。。
回复 使用道具 举报
居然抢到沙发!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马