关于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 格斗制游戏-画板-银行金额转换系统】
66 0
|
Java
java将输入的数字金额转换为中文大写金额
java将输入的数字金额转换为中文大写金额
636 1
|
Java
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
296 0
|
Java
【工具类】java数字金额转换成大写
【工具类】java数字金额转换成大写
598 0
|
5月前
|
JSON Java fastjson
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
Java【问题 06】一次解决JSON.toJSONString和@RestController首字母大小写问题(特指属性首字母大写变小写)
430 0
|
5月前
|
Oracle Java 关系型数据库
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
Java【代码分享 06】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写(去除外层循环:可用于Map对象中的key全部转化为大写或者小写)
273 0
|
Java
java学习第九天笔记-字符串184-金额转换思路实现
java学习第九天笔记-字符串184-金额转换思路实现
64 0
java学习第九天笔记-字符串184-金额转换思路实现
|
Java
Java中浮点数转大写金额工具类
做财务模块时,客户要求使用大写金额来显示数字金额,这时便用到了浮点数转大写金额工具类
279 0
|
5天前
|
监控 Java Linux
Java 性能调优:调整 GC 线程以获得最佳结果
Java 性能调优:调整 GC 线程以获得最佳结果
35 11
|
1天前
|
并行计算 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第6天】 本文将探讨Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。通过详细的示例和解释,读者能够掌握如何在Java中有效地使用多线程来提高程序的性能和响应能力。
4 1