package cn.chnmuseum.party.common.util; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; /** * 获取中文拼音工具类 * * @author jiawei */ public class PinYinUtil { /** * 获取中文对应的拼音 * * @param chinese 中文 * @param firstWord 是否只取首字母 * @param appendNonChinese 中文之间出现字母是是否加入返回的拼音串 * @return 中文对应的拼音 */ public static String getPinYin(String chinese, Boolean firstWord, Boolean appendNonChinese) { //汉语拼音输出格式 HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat(); //大小写设置 大写 pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); //音标设置 无音标 pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //特殊音标ü设置 用V表示 pinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V); char[] charArray = chinese.trim().toCharArray(); StringBuilder stringBuilder = new StringBuilder(); for (char c : charArray) { //匹配如果是汉字 if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { String[] pinyinStringArray; try { pinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(c, pinyinOutputFormat); } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { badHanyuPinyinOutputFormatCombination.printStackTrace(); return null; } if (firstWord != null && Boolean.TRUE.equals(firstWord)) { //取拼音首字母 stringBuilder.append(pinyinStringArray[0].charAt(0)); } else { //取全拼音 stringBuilder.append(pinyinStringArray[0]); } } else { //出现不是中文时,拼接到拼音 if (appendNonChinese != null && Boolean.TRUE.equals(appendNonChinese)) { stringBuilder.append(c); } } } return stringBuilder.toString(); } }