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