pinyin4j使用中文轉化拼音

TerriMabry 8年前發布 | 696 次閱讀 Java JavaScript

[Java]代碼    

package com.app.common.code;

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.StringUtils;

/**
 * 針對中文轉化拼音處理
 * Created by lance on 2016/1/16.
 */
public class PinYinUtils {

    /**
     * 轉為大寫字母, 如:中國人民銀行 =====>ZHONGGUORENMINYINHAN
     * @author lance
     * 2016年1月16日 下午4:56:07
     */
    public static String convertUpper(String text){
        return convert(text, HanyuPinyinCaseType.UPPERCASE, false);
    }

    /**
     * 轉為小寫字母, 如:中國人民銀行 =====>zhongguorenminyinhang
     * @author lance
     * 2016年1月16日 下午4:56:07
     */
    public static String convertLower(String text){
        return convert(text, HanyuPinyinCaseType.LOWERCASE, false);
    }

    /**
     * 首字母大寫, 如:中國人民銀行 =====>ZhongGuoRenMinYinHang
     * @author lance
     * 2016年1月16日 下午5:04:11
     */
    public static String converCapitalize(String text){
        return convert(text, null, true);
    }

    /**
     * 所有中文的第一個字母大寫, 如:中國人民銀行 =====>ZGRMYH
     * @author lance
     * 2016年1月17日 下午10:16:19
     */
    public static String capitalizeLetter(String text){
        String c = converCapitalize(text);
        if(StringUtils.isBlank(c)) {
            return "";
        }

        return StringUtils.replacePattern(c, "[a-z]", "");
    }

    /**
     * 獲取首字母, 如:中國人民銀行 =====>Z
     * @author lance
     * 2016年1月17日 下午10:11:57
     */
    public static String firstLetter(String text){
        String c = converCapitalize(text);
        if(StringUtils.isBlank(c)) {
            return "";
        }

        return StringUtils.substring(c, 0, 1);
    }

    /**
     * 轉為拼音
     * @param text          待轉化的中文字符
     * @param caseType      轉化類型, 即大寫小寫
     * @param isCapitalize  是否首字母大寫
     * @author lance
     * 2016年1月17日 下午10:28:05
     */
    public static String convert(String text, HanyuPinyinCaseType caseType, boolean isCapitalize) {
        if(StringUtils.isBlank(text)){
            return "";
        }
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        if(caseType != null) {
            format.setCaseType(caseType);
            isCapitalize = false;
        }

        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        format.setVCharType(HanyuPinyinVCharType.WITH_V);
        char[] input = StringUtils.trimToEmpty(text).toCharArray();
        StringBuilder builder = new StringBuilder();
        try {
            for (char c: input) {
                if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if(isCapitalize) {
                        builder.append(StringUtils.capitalize(temp[0]));
                    }else {
                        builder.append(temp[0]);
                    }
                } else {
                    if(isCapitalize) {
                        builder.append(StringUtils.capitalize(Character.toString(c)));
                    }else {
                         builder.append(Character.toString(c));
                    }
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination ex) {
            ex.printStackTrace();
        }

        return builder.toString();
    }
}

[Java]代碼    

@Test(enabled = true)
    public void convert() {
        String text = "瀏覽項目的情況, Hello world!";
        logger.info("convertUpper: {}", PinYinUtils.convertUpper(text));
        logger.info("convertLower: {}", PinYinUtils.convertLower(text));
        logger.info("converCapitalize: {}", PinYinUtils.converCapitalize(text));
        logger.info("firstLetter: {}", PinYinUtils.firstLetter(text));
        logger.info("capitalizeLetter: {}", PinYinUtils.capitalizeLetter(text));
    }

/**測試結果***/
22:37:48.044 [main] INFO  com.app.common.GenerationData   - convertUpper: LIULANXIANGMUDEQINGKUANG, Hello world!
22:37:48.045 [main] INFO  com.app.common.GenerationData   - convertLower: liulanxiangmudeqingkuang, Hello world!
22:37:48.045 [main] INFO  com.app.common.GenerationData   - converCapitalize: LiuLanXiangMuDeQingKuang, HELLO WORLD!
22:37:48.046 [main] INFO  com.app.common.GenerationData   - firstLetter: L
22:37:48.046 [main] INFO  com.app.common.GenerationData   - capitalizeLetter: LLXMDQK, HELLO WORLD!
 本文由用戶 TerriMabry 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!