package cn.com.ty.lift.common.utils; import net.sourceforge.pinyin4j.PinyinHelper; /** *

* 汉字转换拼音工具类 *

* * @author wcz * @since 2018/5/9 */ public class PinYinUtils { /** * 拼音中的声调字符 */ private static final String PinYinChar = "\\d"; /** * 空字符串"" */ private static final String EmptyChar = ""; /** * 获取汉字首字母的方法。如: 张三 --> zs * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案 * * @param chinese 汉字字符串 * @return 大写汉子首字母; 如果都转换失败,那么返回null */ public static String toFirstChar(String chinese) { return toHanyuPinyinString(chinese,false,false); } /** * 获取汉字首字母的方法。如: 张三 --> ZS * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案 * * @param chinese 汉字字符串 * @return 大写汉子首字母; 如果都转换失败,那么返回null */ public static String toFirstCharUpper(String chinese){ return toHanyuPinyinString(chinese,false,true); } /** * 获取汉字拼音的方法。如: 张三 --> zhangsan * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案 * * @param chinese 汉字字符串 * @return 汉字拼音; 如果都转换失败,那么返回null */ public static String toPinYin(String chinese) { return toHanyuPinyinString(chinese,true,false); } /** * 获取汉字拼音的方法。如: 张三 --> ZHANGSAN * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案 * * @param chinese 汉字字符串 * @return 汉字拼音; 如果都转换失败,那么返回null */ public static String toPinYinUpper(String chinese) { return toHanyuPinyinString(chinese,true,true); } /** *

* 获取汉字拼音的方法。如: 张三 --> zhangsan/ZHANGSAN/zs/ZS * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案 *

* @param chinese 汉字字符串 * @param isfull true: 全拼, false: 首字母 * @param toUpperCase true: 大写, false: 小写 * @return String 拼音字符串 */ private static String toHanyuPinyinString(String chinese, boolean isfull, boolean toUpperCase) { String result = null; if (null == chinese || chinese.equals(EmptyChar)) { return result; } char[] charArray = chinese.toCharArray(); StringBuffer sb = new StringBuffer(); //先判断,再循环转换 if (isfull) { for (char ch : charArray) { // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字) String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch); if (null != stringArray && stringArray.length > 0) { // 把第几声这个数字给去掉 sb.append(stringArray[0].replaceAll(PinYinChar, EmptyChar)); } } } else { for (char ch : charArray) { // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字) String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch); if (null != stringArray && stringArray.length > 0) { // 取首字母 sb.append(stringArray[0].charAt(0)); } } } if (sb.length() > 0) { result = sb.toString(); if (toUpperCase) { result = result.toUpperCase(); } } return result; } private PinYinUtils(){} }