欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-07 10:22:43
...

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

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;
        }
    }
}