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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

谁会做!

1 个回复

倒序浏览
  1. public static void main(String[] args) {
  2.                 // 定义一个阿拉伯数字的字符串数组
  3.                 String[] arr = { "101000001010", "00101000000010", "100", "sdffd100" };
  4.                 // 遍历数组
  5.                 for (int i = 0; i < arr.length; i++) {
  6.                         // 调用函数,将阿拉伯数字金额 转换为中国传统形式金额
  7.                         String str = transform(arr[i]);
  8.                         // 打印转换后的字符串内容
  9.                         System.out.println(arr[i] + " 转化后为: " + str);
  10.                 }
  11.         }

  12.         public static String transform(String str) {
  13.                 // 使用正则表达式判断字符串格式是否为数字格式
  14.                 if (!str.matches("\\d+")) {
  15.                         System.out.println("字符串" + str + "不是数字格式,无法转换!");
  16.                         return null;
  17.                 }
  18.                 // 将字符串最前面的0去掉
  19.                 while (str.startsWith("0")) {
  20.                         str = str.substring(1, str.length());
  21.                 }
  22.                 // 将字符串数字替换成中文数字
  23.                 String[] num = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
  24.                 String[] cnNum = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
  25.                 for (int i = 0; i < 10; i++) {
  26.                         str = str.replace(num[i], cnNum[i]);
  27.                 }
  28.                 // StringBuilder容器中存放字符串,用于插入删除操作
  29.                 StringBuilder sb = new StringBuilder(str);
  30.                 // 从第index个字符从后往前开始操作,操作一次,index--
  31.                 int index = str.length() - 1;
  32.                 // 存放金额单位
  33.                 String[] unit = { "", "拾", "佰", "仟" };
  34.                 String[] unit4 = { "萬", "亿" };
  35.                 // 判断前一个数是否为零的标记
  36.                 boolean flag = false;
  37.                 // 循环体内对容器sb进行操作
  38.                 for (int i = 0; i < str.length(); i++) {
  39.                         // 每4位插入万每8位插入亿,最低位先不设置单位
  40.                         if (i % 4 == 0 && i != 0) {
  41.                                 // 根据金额规则,单位万前面为4个零时,不插入万,并将index位置(最低位)的零删除
  42.                                 if ((i / 4 - 1) % 2 == 0 && index >= 3 && str.substring(index - 3, index + 1).equals("零零零零")) {
  43.                                         sb.deleteCharAt(index);
  44.                                         index--;
  45.                                         continue;
  46.                                 }
  47.                                 // 否则在index+1位置插入相应的单位:万、亿
  48.                                 sb.insert(index + 1, unit4[(i / 4 - 1) % 2]);
  49.                         }
  50.                         // 如果4位的最低位为零,删除最低位的零,将零标志置为true
  51.                         if (i % 4 == 0 && str.charAt(index) == '零') {
  52.                                 sb.deleteCharAt(index);
  53.                                 flag = true;
  54.                                 index--;
  55.                                 continue;
  56.                         }
  57.                         // 如果前一位为零并且这一位也为零,删除这一位的零
  58.                         if (flag && str.charAt(index) == '零') {
  59.                                 sb.deleteCharAt(index);
  60.                                 index--;
  61.                                 continue;
  62.                         }
  63.                         // 如果当前位为零,将零标志置为true
  64.                         if (str.charAt(index) == '零') {
  65.                                 flag = true;
  66.                                 index--;
  67.                                 continue;
  68.                         }
  69.                         // 当前位不为零,将零标志位置为false,插入金额单位
  70.                         flag = false;
  71.                         sb.insert(index + 1, unit[i % 4]);
  72.                         index--;
  73.                 }
  74.                 // 完善金额表示形式
  75.                 sb.append("圆整");
  76.                 return sb.toString();

  77.         }
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马