关于Java转换金额数字为大写金额

简介: 关于Java转换金额数字为大写金额 目前只写到万亿

public class MoneyConversion {
   private static final String[] CHINESE_NUMBERS = {"", "", "", "", "", "", "", "", "", ""};
   private static final String[] UNIT_SMALL_NUMBERS = {"", "", "", ""};
   private static final String[] UNIT_BIG_NUMBERS = {"", "", "亿", "百亿", "千亿", "万亿"};

   public static void main(String[] args) {
       String moneys = "1000000001";
       System.out.println("源数据为:" + moneys + " 修改完大写的结果为:" + createMoneyCon(moneys));

   }

   private static String createMoneyCon(String moneys) {
       //反转字符串
       StringBuilder money = new StringBuilder(moneys).reverse();
       //4位为分隔
       String regex = "(.{4})";
       String $1_ = money.toString().replaceAll(regex, "$1 ");
       //System.out.println("分隔完的字符为:" + $1_);
       //分隔数组并且反转
       String[] $1_split = arrayInversion($1_.split(" "));
       //System.out.println("反转后的数组为:" + Arrays.toString($1_split));
       //转化大写
       arrayChinese($1_split);
       //System.out.println("转换中文大写的数组为:" + Arrays.toString($1_split));
       //加小单位
       arrayUnitSmall($1_split);
       //System.out.println("加完小单位的数组为:" + Arrays.toString($1_split));
       //加大单位
       arrayUnitBig($1_split);
       //System.out.println("加完大单位的数组为:" + Arrays.toString($1_split));
       return getString($1_split);
       //System.out.println("修改完的结果为:" + string);
   }

   public static String[] arrayInversion(String[] $1_split) {
       //将分割完的数字翻转
       for (int i = 0; i < $1_split.length; i++) {
           $1_split[i] = new StringBuilder($1_split[i]).reverse().toString();
       }
       //将数组反转
       String temp;
       for (int i = 0; i < $1_split.length / 2; i++) {
           temp = Integer.parseInt($1_split[i]) + "";
           $1_split[i] = Integer.parseInt($1_split[$1_split.length - 1 - i]) + "";
           $1_split[$1_split.length - 1 - i] = temp;
       }
       return $1_split;
   }

   public static void arrayChinese(String[] $1_split) {
       for (int i = 0; i < $1_split.length; i++) {
           StringBuilder sb = new StringBuilder();
           String s = $1_split[i];
           for (int j = 0; j < s.length(); j++) {
               // - '0'是因为字符转换数字
               sb.append(CHINESE_NUMBERS[s.charAt(j) - '0']);
           }
           $1_split[i] = sb.toString();
       }
   }

   public static void arrayUnitSmall(String[] $1_split) {
       for (int i = 0; i < $1_split.length; i++) {
           StringBuilder sb = new StringBuilder();
           String s = $1_split[i];
           for (int j = 0; j < s.length(); j++) {
               char c = s.charAt(j);
               if (!(c + "").equals("")) {
                   sb.append(c).append(UNIT_SMALL_NUMBERS[s.length() - 1 - j]);
               }
           }
           $1_split[i] = sb.toString();
       }
   }

   public static void arrayUnitBig(String[] $1_split) {
       for (int i = 0; i < $1_split.length; i++) {
           //判断是否小于5
           String s = $1_split[i];
           StringBuilder sb = new StringBuilder();
           if (i != 0 && s.length() <= 5 && !s.contains("")) {
               sb.append(CHINESE_NUMBERS[0]);
           }
           if (ObjectUtil.isNotEmpty(s)) {
               $1_split[i] = sb.append(s).append(UNIT_BIG_NUMBERS[$1_split.length - 1 - i]).toString();
           }
       }
   }

   public static String getString(String[] $1_split) {
       StringBuilder sb = new StringBuilder();
       for (String s : $1_split) {
           sb.append(s);
       }
       return ObjectUtil.isEmpty(sb.toString()) ? CHINESE_NUMBERS[0] + "" : sb.toString() + "";
   }
}

相关文章
|
算法 Java
48.【Java 格斗制游戏-画板-银行金额转换系统】
48.【Java 格斗制游戏-画板-银行金额转换系统】
71 0
|
Java
java将输入的数字金额转换为中文大写金额
java将输入的数字金额转换为中文大写金额
763 1
|
Java
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
321 0
|
Java
【工具类】java数字金额转换成大写
【工具类】java数字金额转换成大写
613 0
|
6月前
|
JSON Java fastjson
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
574 0
|
6月前
|
Oracle Java 关系型数据库
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
313 0
|
Java
java学习第九天笔记-字符串184-金额转换思路实现
java学习第九天笔记-字符串184-金额转换思路实现
67 0
java学习第九天笔记-字符串184-金额转换思路实现
|
Java
Java中浮点数转大写金额工具类
做财务模块时,客户要求使用大写金额来显示数字金额,这时便用到了浮点数转大写金额工具类
287 0
|
8天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
7天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
下一篇
无影云桌面