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("送将", ""));
    }
}
发布了170 篇原创文章 · 获赞 64 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/hy_coming/article/details/104006754