在使用某些语音合成引擎的时候,遇到一些问题,比如三位数的数字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)