java 中文数字转阿拉伯数字

这是一个Java方法,用于将中文数字字符串转换为阿拉伯数字。通过建立数字和单位的映射,去除多余的'零'字符,然后根据'亿'和'万'进行分节,最后将每个节转换为数字并组合成总结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static String allChineseNum = "零一二三四五六七八九十百千万亿0123456789两";

   public static void ChangeChnString(String chnStr) {
       // unit
       unitMap.put("十", 10L);
       unitMap.put("百", 100L);
       unitMap.put("千", 1000L);
       unitMap.put("万", 10000L);
       unitMap.put("亿", 100000000L);
       // num
       numMap.put("零", 0L);
       numMap.put("一", 1L);
       numMap.put("二", 2L);
       numMap.put("三", 3L);
       numMap.put("四", 4L);
       numMap.put("五", 5L);
       numMap.put("六", 6L);
       numMap.put("七", 7L);
       numMap.put("八", 8L);
       numMap.put("九", 9L);

       // 去零
       for (int i = 0; i < chnStr.length(); i++) {
           if ('零' == (chnStr.charAt(i))) {
               chnStr = chnStr.substring(0, i) + chnStr.substring(i + 1);
           }
       }
       // 分切成三部分
       int index = 0;
       boolean yiflag = true;
       boolean yiwanflag = true; //亿字节中存在万
       boolean wanflag = true;
       for (int i = 0; i < chnStr.length(); i++) {
           if ('亿' == (chnStr.charAt(i))) {
               // 存在亿前面也有小节的情况
               stryi = chnStr.substring(0, i);
               if (chnStr.indexOf('亿' + "") > chnStr.indexOf('万' + "")) {
                   stryi = chnStr.substring(0, i);
                   for (int j = 0; j < stryi.length(); j++) {
                       if ('万' == (stryi.charAt(j))) {
                           yiwanflag = false;
                           stryiwan = stryi.substring(0, j);
                           stryione = stryi.substring(j + 1);
                       }
                   }
               }
               if(yiwanflag){//亿字节中没有万,直接赋值
                   stryione = stryi;
               }
               index = i + 1;
               yiflag = false;// 分节完毕
               strone = chnStr.substring(i + 1);

           }
           if ('万' == (chnStr.charAt(i)) && chnStr.indexOf('亿' + "") < chnStr.indexOf('万' + "")) {
               strwan = chnStr.substring(index, i);
               strone = chnStr.substring(i + 1);
               wanflag = false;// 分节完毕
           }
       }
       if (yiflag && wanflag) {// 没有处理
           strone = chnStr;
       }
   }

   // 字符串转换为数字
   public static long chnStrToNum(String str) {
       long strreuslt = 0;
       long value1 = 0;
       long value2 = 0;
       long value3 = 0;
       if (str.isEmpty()) {
           return 0;
       }
       for (int i = 0; i < str.length(); i++) {
           char bit = str.charAt(i);
           // 数字
           if (numMap.containsKey(bit + "")) {
               value1 = numMap.get(bit + "");
               if (i == str.length() - 1) {
                   strreuslt += value1;
               }

           }
           // 单位
           else if (unitMap.containsKey(bit + "")) {
               value2 = unitMap.get(bit + "");
               if (value1 == 0 && value2 == 10L) {
                   value3 = 1 * value2;
               } else {
                   value3 = value1 * value2;
                   // 清零避免重复读取
                   value1 = 0;
               }
               strreuslt += value3;
           }
       }
       return strreuslt;
   }

   // 组合数字
   public static int ComputeResult(String chnStr) {
       ChangeChnString(chnStr);
       long stryiwanresult = chnStrToNum(stryiwan);
       long stryioneresult = chnStrToNum(stryione);
       long strwanresult = chnStrToNum(strwan);
       long stroneresult = chnStrToNum(strone);
       result = (stryiwanresult + stryioneresult) * 100000000 + strwanresult * 10000 + stroneresult;
       // 重置
       stryi = "";
       strwan = "";
       strone = "";
       return (int) result;
   }

   private static long result = 0;
   // HashMap
   private static Map<String, Long> unitMap = new java.util.HashMap<String, Long>();
   private static Map<String, Long> numMap = new java.util.HashMap<String, Long>();

   // 字符串分离
   private static String stryi = new String();
   private static String stryiwan = new String();
   private static String stryione = new String();
   private static String strwan = new String();
   private static String strone = new String();

public static int cn2Num(String chineseNum) {
       return ComputeResult(chineseNum);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值