pinyin4j的使用

maven依赖:https://mvnrepository.com/artifact/com.belerweb/pinyin4j

pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,在我们的日常开发过程中可能会用到,这里记录一下

@Slf4j
public class PinyinUtil {
    /**
     * 汉字转拼音
     *
     * @param chinese 对象
     * @param type    类型:大写->HanyuPinyinCaseType.UPPERCASE  小写->HanyuPinyinCaseType.LOWERCASE
     * @param split   连接符
     * @return
     */
    public static String hanYu2PinYin(String chinese, HanyuPinyinCaseType type, String split) {
        char[] target = chinese.trim().toCharArray();
        StringBuilder result = new StringBuilder();
        for (char c : target) {
            if (Pattern.matches(RegularConstants.CHINESE_CHAR, String.valueOf(c))) {
                result.append(getPinYin(c, type)[0]).append(split);
            } else {
                result.append(c).append(split);
            }
        }
        return result.toString();
    }

    /**
     * 汉字转拼音并首字母大写
     *
     * @param chinese 对象
     * @param split   连接符
     * @return
     */
    public static String hanYu2PinYinUpperCaseForFirst(String chinese, String split) {
        char[] target = chinese.trim().toCharArray();
        StringBuilder result = new StringBuilder();
        for (char c : target) {
            if (Pattern.matches(RegularConstants.CHINESE_CHAR, String.valueOf(c))) {
                result.append(getPinYinUpperCaseForFirst(c)[0]).append(split);
            } else {
                result.append(c).append(split);
            }
        }
        return result.toString();
    }

    private static String[] getPinYin(char chinese, HanyuPinyinCaseType type) {
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        outputFormat.setCaseType(type);
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        outputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

        String[] result = null;
        try {
            result = PinyinHelper.toHanyuPinyinStringArray(chinese, outputFormat);
        } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
            log.info("change target:{} to pinyin is error", chinese);
        }
        return result;
    }

    private static String[] getPinYinUpperCaseForFirst(char chinese) {
        String[] result = getPinYin(chinese, HanyuPinyinCaseType.LOWERCASE);
        if (null != result) {
            String target = result[0];
            result[0] = target.substring(0, 1).toUpperCase() + target.substring(1);
        }
        return result;
    }


    public static void main(String[] args) {
        System.out.println(hanYu2PinYin("好", HanyuPinyinCaseType.LOWERCASE, " "));
        System.out.println(hanYu2PinYin("会受到更好", HanyuPinyinCaseType.UPPERCASE, " "));
        System.out.println(hanYu2PinYin("kkkkkk", HanyuPinyinCaseType.UPPERCASE, " "));
        System.out.println(hanYu2PinYinUpperCaseForFirst("送将", ""));
    }
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值