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();
    }
}