【Java实现】汉字转化为数字

把一个汉字转化为对应的阿拉伯数字,代码如下:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Main m=new Main();
        System.out.println(m.toNumber("四亿七百六十万五千四百零九"));
    }

    HashMap<Character,Integer> number=new HashMap<>(){{
        put('一',1);
        put('二',2);
        put('三',3);
        put('四',4);
        put('五',5);
        put('六',6);
        put('七',7);
        put('八',8);
        put('九',9);
    }};

    HashMap<Character,Integer> digit=new HashMap<>(){{
        put('十',10);
        put('百',100);
        put('千',1000);
        put('万',10000);
        put('亿',100000000);
    }};

    List<Integer> temp=new ArrayList<>();
    public int toNumber(String str){
        boolean ok=process(str);
        int res=0;
        if(ok){
            for(int i:temp){
                res+=i;
            }
        }
        return res;
    }

    public boolean process(String input){
        if(input.equals(""))
            return true;
        else if(digit.containsKey(input.charAt(0))){
            if(temp.size()==0 || temp.get(temp.size()-1) >= digit.get(input.charAt(0))){
                return false;
            }
            int cur=0;
            while(temp.size()>=1 && temp.get(temp.size()-1) < digit.get(input.charAt(0))){
                cur+=temp.get(temp.size()-1);
                temp.remove(temp.size()-1);
            }
            temp.add(cur*digit.get(input.charAt(0)));
            return process(input.substring(1));
        }else if(number.containsKey(input.charAt(0))){
            temp.add(number.get(input.charAt(0)));
            return process(input.substring(1));
        }else if(input.charAt(0)=='零'){
            return process(input.substring(1));
        }else{
            return false;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值