关于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将输入的数字金额转换为中文大写金额
745 1
|
Java
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
320 0
|
Java
【工具类】java数字金额转换成大写
【工具类】java数字金额转换成大写
609 0
|
6月前
|
JSON Java fastjson
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
550 0
|
6月前
|
Oracle Java 关系型数据库
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
305 0
|
Java
java学习第九天笔记-字符串184-金额转换思路实现
java学习第九天笔记-字符串184-金额转换思路实现
67 0
java学习第九天笔记-字符串184-金额转换思路实现
|
Java
Java中浮点数转大写金额工具类
做财务模块时,客户要求使用大写金额来显示数字金额,这时便用到了浮点数转大写金额工具类
282 0
|
SQL 缓存 Java
Java金额计算的问题
简介:金额计算在一些支付类项目和电商项目中十分常见,很多开发在日常的写代码中时长会使用加减乘除等计算,但是有一些新手同学一旦使用错了方式,往往会挨上领导的批评,这次就来看下金额计算中的几个注意点
Java金额计算的问题
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。