将汉字转换成数字


出处  http://www.diybl.com/course/3_program/java/javajs/20081124/152535.html

import java.util.*;
public class Hz2Num{
    private static final String[] hz = {"零","一","二","三","四","五","六","七","八","九"};
    private static final Map<String, Integer> hzsz = new HashMap<String, Integer>();
    private static final Map<String, Integer> hzradix = new HashMap<String, Integer>();
    
    static{
        for(int i = 0; i < hz.length; i ++){
            hzsz.put(hz[i], i);
        }
        hzradix.put("十", 10);
        hzradix.put("百", 100);
        hzradix.put("千", 1000);
        hzradix.put("万", 10000);
        hzradix.put("亿", 100000000);
    }
    
    public static void main(String[] args){
        String[] srcs = {"一亿","一万","一","十","十一","二十","二十一",
                         "一百","一百零一","一百一十","一百一十一",
                         "五十亿三千零七十五万零六百二十二",
                         "十三亿三千零十五万零三百一十二"};
        for(int i = 0; i < srcs.length; i ++){
            System.out.println(exchange1(srcs[i]));
        }
    }
    
    public static long exchange1(String src){
        String []tmp1 = src.split("亿",-1);   //-1表示不能舍弃分割的空字符串
        if(tmp1.length == 2){
            return (long)exchange2(tmp1[0]) * hzradix.get("亿") + exchange2(tmp1[1]);
        }else{
            return exchange2(tmp1[0]);
        }
    }
    
    public static int exchange2(String src){
        String []tmp1 = src.split("万",-1);   //-1表示不能舍弃分割的空字符串
        if(tmp1.length == 2){
            return exchange(tmp1[0]) * hzradix.get("万") + exchange(tmp1[1]);
        }else{
            return exchange(tmp1[0]);
        }
    }
    
    public static int exchange(String src){//十、百、千
        int bg = 0;
        for(int i = 0; i < src.length(); i ++){
            String c1 = ""+src.charAt(i);
            if(hzsz.containsKey(c1)){
                if(c1.equals("零")){
                    continue;
                }
                if(i + 1 < src.length()){
                    String c2 = ""+src.charAt(i+1);
                    if(hzradix.containsKey(c2)){
                        bg += hzsz.get(c1) * hzradix.get(c2);
                        i++;
                    }
                }else{
                    bg += hzsz.get(c1);
                }
            }else if(i == 0 && c1.equals("十") ||//10-19之间的习惯用法                      // 如(十二)
                     i > 0 && c1.equals("十") && ((""+src.charAt(i-1)).equals("零"))){  // 如(三千零十四)   
                bg += 10;
            }
        }
        return bg;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值