阿拉伯数字转换成中文读法

给定一个阿拉伯数字,然后将数字转换成中文的读法。

这几天在连续两个笔试中遇到了这道题,结果都有些悲剧了,趁今天有时间,怒写一记算法。

        public static String readNum(String s){
            String[] unitStrings={"","十","百","千","万","十","百","千","亿","十"};
            String[] num={"零","一","二","三","四","五","六","七","八","九"};
            StringBuilder rst=new StringBuilder();
            int len=s.length();
            int index=s.length()-1;
            while(index>=0){
                int curNum=Integer.valueOf(s.charAt(index)+"");
                if(curNum!=0){
                    rst.insert(0, unitStrings[len-index-1]);
                    rst.insert(0, num[curNum]);                 
                }else {
                    if(rst.length()!=0&&rst.charAt(0)!='零'&&rst.charAt(0)!='万'&&rst.charAt(0)!='亿'){
                        rst.insert(0, num[curNum]);
                        }
                    if(unitStrings[len-index-1].equals("万")||unitStrings[len-index-1].equals("亿")){
                        rst.insert(0, unitStrings[len-index-1]);
                    }
                }
                index--;
            }
            return rst.toString();
        }

以及顺便写了将中文读法转换成阿拉伯数字的方法

        public static int writeNum(String s){
            Map unitMap=new HashMap();
            unitMap.put('十', 10);
            unitMap.put('百', 100);
            unitMap.put('千', 1000);
            unitMap.put('万', 10000);
            unitMap.put('亿', 100000000);
            Map numMap=new HashMap();
            numMap.put('零', 0);
            numMap.put('一', 1);
            numMap.put('二', 2);  
            numMap.put('三', 3);  
            numMap.put('四', 4);  
            numMap.put('五', 5);  
            numMap.put('六', 6);  
            numMap.put('七', 7);  
            numMap.put('八', 8);  
            numMap.put('九', 9);
            int rst=0;
            int index=0;
            while(indexif(numMap.containsKey(s.charAt(index))){
                    int cur=numMap.get(s.charAt(index));
                    index++;
                    while(indexindex))&&s.charAt(index)!='万'&&s.charAt(index)!='亿'){
                        cur*=unitMap.get(s.charAt(index));
                        index++;
                    }
                    rst+=cur;
                    if(indexindex)=='万'){
                        rst*=10000;
                        index++;
                    }
                    if(indexindex)=='亿'){
                        rst*=100000000;
                        index++;
                    }
                }
            }
            return rst;
        }

你可能感兴趣的:(Java语言)