java汉字转化为整数

今天碰巧需要,就写了一个汉字转化为数字的demo。
如:三百二十 —->320

废话不多说,直接上例子。

package com.yxxs.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class StringNum2Int {

    public static HashMap<String,Integer> hm = new HashMap<String,Integer>();

    static{
        hm.put("一", 1);
        hm.put("二", 2);
        hm.put("三", 3);
        hm.put("四", 4);
        hm.put("五", 5);
        hm.put("六", 6);
        hm.put("七", 7);
        hm.put("八", 8);
        hm.put("九", 9);
    }

    public static void main(String[] args) {
        String num = "四千二百五十一";
        System.out.println(Chinese2Int(num));
    }

    /**
     * 1-1 三
     * 2-10 十五
     * 3-10  三十五
     * 4-100 四百二十
     * 5-100 四百二十一
     * 6-1000 三千五百二十
     * 7-1000 三千五百二十一
     * 找出规律:最高位是:Math.pow(10,lenth/2);  eg: 三十五的最高位是10的lenth/2次方(lenth=3)
     */

    //汉字数字转化为整数
    public static int Chinese2Int(String num){

        List<Character> list = new ArrayList<Character>();
        String regex = "[一二三四五六七八九]";
        //最终返回的整数
        int finalnum = 0; 
        //字符串长度
        int length = num.length();
        //幂,用来做幂运算
        int mi = length/2;

        char[] chars = num.toCharArray();

        //将千、百、十等表示位的汉字去掉,只留下具体数字,如三百二十一,只保留三、二、一,放入list
        for(char c : chars){
            if(String.valueOf(c).matches(regex))
                list.add(c);
        }

        for(Character c : list){
            //处理特殊情况--只有两位,eg:十八 
            if(length == 2 && list.get(0) == '十'){
                finalnum += 10;
                mi--;
            }
            //处理正常情况
            if(mi >= 0){
                int wei = (int)Math.pow(10, mi);
                finalnum += hm.get(String.valueOf(c))*wei;
                mi --;
            }
        }
        return finalnum;
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值