PinYinUtil.java 3.68 KB
package cn.chnmuseum.party.common.util;

import net.duguying.pinyin.Pinyin;
import net.duguying.pinyin.PinyinException;
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;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;

/**
 * 获取中文拼音工具类
 *
 * @author jiawei
 */
public class PinYinUtil {

    /**
     * 获取中文对应的拼音
     *
     * @param chinese          中文
     * @param firstWord        是否只取首字母
     * @param appendNonChinese 中文之间出现字母是是否加入返回的拼音串
     * @return 中文对应的拼音
     */
    public static String getPinYin(String chinese, Boolean firstWord, Boolean appendNonChinese) {
       /* 6月1日修改前
       //汉语拼音输出格式
        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();*/

       // 6月1日修改后
        String pinyinString = new String();
        try {
            // 是否需要将英文字符和拼音拼接
            if (appendNonChinese) {
                chinese = RegExUtils.replaceAll(chinese, "[a-zA-Z]", "");
            }
            Pinyin pinyin = new Pinyin();
            if (firstWord) {
                // 拼音首字母
                pinyinString = pinyin.translateFirstChar(chinese);
            }else {
                // 拼音全拼
                String withSepNoMark = pinyin.translateWithSepNoMark(chinese,"");
                // 将字符串中的'ü'替换为'v’
                pinyinString = withSepNoMark.replace("ü", "v");
                pinyinString = pinyinString.replace(",", "");
            }
        } catch (PinyinException e) {
            e.printStackTrace();
        }
        // 转为大写
        return pinyinString.toUpperCase();
    }

}