读书人

阿拉伯数字变换为拼音读法

发布时间: 2012-12-27 10:17:09 作者: rapoo

阿拉伯数字转换为拼音读法
今天同学让看下这个题目,折腾了两个多小时,设计了个巨复杂的算法,漏洞百出。
回来的路上忽然想起来其实很简单啊,贴一下代码。
感叹一下,以后什么都要想好了再动手,那怕什么都不做,光思考了一大半时间,很多时候也比没想清楚急匆匆得开始干好得多。

import java.util.regex.Pattern;public class num2pinyin {    public static String numArray[] = {"Ling","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu"};    //int范围到十亿就足够了    public static String pinyinArray[] = {"","Shi","Bai","Qian","Wan","ShiWan","BaiWan","QianWan","Yii","ShiYii"};    public static String Num2pinyin(int input)    {        StringBuilder sb = new StringBuilder();        char[] nums = String.valueOf(input).toCharArray();        for(int i=0;i<nums.length;i++)        {            int currentNum = nums[i] - '0';                   sb.append(numArray[currentNum]);            if(currentNum!=0)                sb.append(pinyinArray[nums.length-1-i]);        }        String rst = sb.toString();        //多个0替换成1个        rst = rst.replaceAll("Ling(Ling)+", "Ling");        //开头的“一十”换成“十”        if(rst.startsWith("YiShi"))            rst = rst.substring(2);                //去掉末尾0        if(rst.length()>4 && rst.endsWith("Ling"))            rst = rst.substring(0, rst.length()-4);                //出现多个亿的话只保留最后一个        rst = remainLast(rst,"Yii");        //亿后面再出现多个万的话只保留最后一个万        rst = remainLast(rst,"Wan");                return rst;    }    //str 中删掉所有content,只保留最后一个    public static String remainLast(String str,String content)    {        while(str.indexOf(content)!=str.lastIndexOf(content))            str=str.replaceFirst(Pattern.quote(content), "");        return str;    }    /**     * @param args     */    public static void main(String[] args) {        System.out.println(Num2pinyin(0));        System.out.println(Num2pinyin(1));        System.out.println(Num2pinyin(9));        System.out.println(Num2pinyin(15));        System.out.println(Num2pinyin(100));        System.out.println(Num2pinyin(105));        System.out.println(Num2pinyin(115));        System.out.println(Num2pinyin(1001));        System.out.println(Num2pinyin(2000));        System.out.println(Num2pinyin(2100));        System.out.println(Num2pinyin(2010));        System.out.println(Num2pinyin(9999));        System.out.println(Num2pinyin(10000));        System.out.println(Num2pinyin(10001));        System.out.println(Num2pinyin(10010));        System.out.println(Num2pinyin(10100));        System.out.println(Num2pinyin(21000));        System.out.println(Num2pinyin(99999));        System.out.println(Num2pinyin(100000));        System.out.println(Num2pinyin(890909));        System.out.println(Num2pinyin(2200000));        System.out.println(Num2pinyin(2100000000));    }}

读书人网 >编程

热点推荐