阿拉伯数字转中文汉字

在使用某些语音合成引擎的时候,遇到一些问题,比如三位数的数字110,语音合成播放是幺幺零,但是我想让她合成一百一十,怎么做呢?

所以我打算把阿拉伯数字转换成中文汉字就可以正常合成了,代码如下:

public class NumberHanFormat {
    public static final String ZERO = "零";
    public static final String NEGATIVE = "负";
    public static final String SPACE = " ";
    public static final String MILLION = "百万";
    public static final String THOUSAND = "千";
    public static final String HUNDRED = "百";
    public static final String[] INDNUM = {"零", "一", "二", "三", "四", "五", "六",
            "七", "八", "九", "十", "十一", "十二", "十三",
            "十四", "十五", "十六", "十七", "十八", "十九"};
    public static final String[] DECNUM = {"零","一十","二十", "三十", "四十", "五十", "六十",
            "七十", "八十", "九十"};

    //数字转换汉字
    public String format(int i) {

        StringBuilder sb = new StringBuilder();

        if(i == 0) {
            return ZERO;
        }

        if(i < 0) {
            sb.append(NEGATIVE);
            i *= -1;
        }


        if(i >= 1000000) {
            sb.append(numFormat(i / 1000000)).append(MILLION);
            i %= 1000000;

        }

        if(i >= 1000) {
            sb.append(numFormat(i / 1000)).append(THOUSAND);

            i %= 1000;
        }

        if(i < 1000){
            sb.append(numFormat(i));
        }

        return sb.toString();
    }

    // 3位数转汉字
    public String numFormat(int i) {

        StringBuilder sb = new StringBuilder();

        if(i >= 100) {
            sb.append(INDNUM[i / 100]).append(HUNDRED);
        }

        int j = i%100;

        if(j != 0) {
            if(j >= 20) {
                sb.append(DECNUM[j / 10]);
                if(j % 10 != 0) {
                    sb.append(INDNUM[j % 10]);
                }
            } else {
                if(i>100) {
                    if(j<10) {
                        sb.append(DECNUM[j / 10]).append(INDNUM[j % 10]);
                    } else {
                        sb.append(DECNUM[1]).append(INDNUM[j % 10]);
                    }
                } else {
                    sb.append(INDNUM[j]);
                }
            }
        }

        return sb.toString();
    }
}

调用方法:

public static NumberWordFormat mNumberWordFormat;
mNumberWordFormat = new NumberWordFormat();
mNumberWordFormat.format(power1)