PinYinUtil.java 3.68 KB
Newer Older
1 2
package cn.chnmuseum.party.common.util;

nie'hong's avatar
nie'hong committed
3 4
import net.duguying.pinyin.Pinyin;
import net.duguying.pinyin.PinyinException;
5 6 7 8 9 10
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;
11 12
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
13

14 15
import java.util.ArrayList;

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/**
 * 获取中文拼音工具类
 *
 * @author jiawei
 */
public class PinYinUtil {

    /**
     * 获取中文对应的拼音
     *
     * @param chinese          中文
     * @param firstWord        是否只取首字母
     * @param appendNonChinese 中文之间出现字母是是否加入返回的拼音串
     * @return 中文对应的拼音
     */
    public static String getPinYin(String chinese, Boolean firstWord, Boolean appendNonChinese) {
32
       /* 6月1日修改前
nie'hong's avatar
nie'hong committed
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 64 65 66 67
        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);
                }
            }
        }
68
        return stringBuilder.toString();*/
nie'hong's avatar
nie'hong committed
69 70

       // 6月1日修改后
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
        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");
86
                pinyinString = pinyinString.replace(",", "");
87 88 89 90 91 92
            }
        } catch (PinyinException e) {
            e.printStackTrace();
        }
        // 转为大写
        return pinyinString.toUpperCase();
nie'hong's avatar
nie'hong committed
93 94
    }

95
}