作者 | qzh
地址 | https://github.com/javaexception
声明 | 本文是 qzh 原创,已获授权发布,未经原作者允许请勿转载
前言
最近写了一个金额的语音播报功能,已封装成依赖库到 Github,希望对大家有所帮助。
Github地址 :
https://github.com/javaexception
思路
(1).准备音频文件。
(2).把要播报的金额转换成大写的金额,比如"零壹贰叁肆伍陆柒捌玖,分角 拾佰仟万拾佰仟亿拾佰仟万"的组合。
(3).通过 MediaPlayer 播放音频。
一.准备音频文件
下面是我音频文件,里面是大写的数字,为播报金额组合做准备。
二.金额转换
public class PlaySound {
/**
* 截取字符串
*
* @param str 需要截取的字符串
* @param idx1 开始位置
* @param idx2 截止位置
* @return 截取后的字符串
*/
public static String subString(String str, int idx1, int idx2) {
try {
return str.substring(idx1, idx2);
} catch (Exception ex) {
return "";
}
}
/**
* 传递一个字符串参数,如果是null返回“”字符串,否则去除前后的空格。
*
* @param str 传入参数
* @return 没有前后没有空格的字符串
*/
public static final String trim(String str) {
if (str == null) return "";
else return str.trim();
}
/**
* 把double类型数据转换成有格式的字符串
*
* @param d 需要转换的double类型数据
* @param format 格式化方式
* @return 有格式的字符串
*/
public static String formatDoubleToString(double d, String format) {
String doubleStr = String.valueOf(d);
java.text.DecimalFormat decf = new java.text.DecimalFormat(format);
String formatStr = decf.format(d);
/**
* 通过java保留小数了
* 如果转换前的长度>转换后的长度,Java的转换就有可能出错
*/
if (doubleStr.length() > formatStr.length()) {
/**
* 如果前面的都一致,但最后一位大于4就需要进位
* 否则不进位
*/
if (formatStr.equals(doubleStr.substring(0, formatStr.length()))) {
/**
* 取转换前的后一位,
* 有可能是“.”
*/
String followStr = doubleStr.substring(formatStr.length(), formatStr.length() + 1);
if (".".equals(followStr)) {
followStr = doubleStr.substring(formatStr.length() + 1