【Java】汉字转拼音

   将汉字转成拼音及汉字首字母,可以使用jar包 pingyin4j,但是遇到多音节汉字就会有问题。如果使用大名鼎鼎的jpinyin,可以自动识别常见多音字,而且还支持简体转换为繁体,检查是简体还是繁体,是否为中文字符等功能。下面简单列举了汉字转换拼音、简体转换繁体和判断是否为中文字符串。 

依赖包

       <dependency>
            <groupId>com.github.stuxuhai</groupId>
            <artifactId>jpinyin</artifactId>
            <version>1.1.8</version>
        </dependency>

示例

import com.github.stuxuhai.jpinyin.ChineseHelper;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class ChangeToPinYinJP {

    private static String REGEX_CHINESE_CHARACTER = "[\\u4E00-\\u9FA5]+";
    public static void main(String[] args) {
        System.out.println(changeHanZi2TonePinYin("音乐,。 359 非常 Wiener 快乐"));
//        搞不定的示例
        printStr("人参 参与");

    }

    public static void printStr(String ret) {
        String result = changeToTonePinYin(ret);
        System.out.println("Oops! --》 " + result);
    }

    /**
     * 转换为有声调的拼音字符串
     *
     * @param givenHanZi 指定汉字
     * @return 有声调的拼音字符串
     */
    public static String changeToMarkPinYin(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = PinyinHelper.convertToPinyinString(givenHanZi, " ", PinyinFormat.WITH_TONE_MARK);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

    /**
     * 转换为数字声调字符串
     *
     * @param givenHanZi 需转换的汉字
     * @return 转换完成的拼音字符串
     */
    public static String changeToNumberPinYin(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = PinyinHelper.convertToPinyinString(givenHanZi, " ", PinyinFormat.WITH_TONE_NUMBER);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

    /**
     * 转换为不带音调的拼音字符串,只转换汉字部分,不转换数字、标点符号和英文字母
     * 自动识别常用多音字
     * @param givenHanZi 汉字字符串
     * @return 拼音字符串
     */
    public static String changeHanZi2TonePinYin(String givenHanZi) {
        if (StringUtils.isBlank(givenHanZi)) {
            return "";
        }
        String tempOutput = "";
        StringBuilder output = new StringBuilder();
        char[] input = givenHanZi.trim().toCharArray();

        try {
            for (int i = 0; i < input.length; i++) {
                if (Character.toString(input[i]).matches(REGEX_CHINESE_CHARACTER)) {
                    tempOutput += Character.toString(input[i]);
                } else {
                    tempOutput = changeToTonePinYin(tempOutput);
                    output = output.append(tempOutput).append(Character.toString(input[i]));
                    tempOutput = "";
                }
            }
            if (StringUtils.isNotBlank(tempOutput)) {
                output = output.append(changeToTonePinYin(tempOutput));
            }
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return output.toString();
    }

    /**
     * 转换为不带音调的拼音字符串
     *
     * @param givenHanZi 需转换的汉字
     * @return 拼音字符串
     */
    public static String changeToTonePinYin(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = PinyinHelper.convertToPinyinString(givenHanZi, " ", PinyinFormat.WITHOUT_TONE);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

    /**
     * 转换为每个汉字对应拼音首字母字符串
     *
     * @param givenHanZi 需转换的汉字
     * @return 拼音字符串
     */
    public static String changeToGetShortPinYin(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = PinyinHelper.getShortPinyin(givenHanZi);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

    /**
     * 检查汉字是否为多音字
     *
     * @param givenHanZi 需检查的汉字
     * @return true 多音字,false 不是多音字
     */
    public static boolean checkPinYin(char givenHanZi) {
        boolean check = false;
        try {
            check = PinyinHelper.hasMultiPinyin(givenHanZi);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return check;
    }

    /**
     * 简体转换为繁体
     *
     * @param givenHanZi
     * @return
     */
    public static String changeToTraditional(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = ChineseHelper.convertToTraditionalChinese(givenHanZi);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

    /**
     * 繁体转换为简体
     *
     * @param givenHanZi
     * @return
     */
    public static String changeToSimplified(String givenHanZi) {
        String tempStr = null;
        try {
            tempStr = ChineseHelper.convertToSimplifiedChinese(givenHanZi);
        } catch (Exception e) {
            log.error( "转换异常信息:", e);
        }
        return tempStr;
    }

}

  

posted @ 2020-06-16 22:00  楼兰胡杨  阅读(875)  评论(0编辑  收藏  举报