PinYinUtil.java 2.56 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
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();
    }
}