当前位置: 首页 > 工具软件 > Pinyin4Net > 使用案例 >

汉字转拼音之pinyin4j 简单使用

储臻
2023-12-01

Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,这时候Pinyin4j就可以派上用场

Pinyin4j支持方式:

1.支持简体中文和繁体中文字符
2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼 法和国语罗马字
3.支持多音字,即可以获取一个中文字符的多种发音
4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 “ˉ”,阳平"ˊ",上声"ˇ",去声"ˋ")的输出

Pinyin4j支持多种格式:

全部大小YHY
全部大写(中间加字符串*)
全部小写
全部小写(中间加字符串*)
返回首字母大写Y
返回首字母小写y

引入依赖

<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>
package com.jsq.myspringboot.javaee;

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;

public class TestPinyin4j {

    public static void main(String[] args) {
            String hanzi="夫好绿人参";
            String[][] pinyin=hanziToPinyinArr(hanzi);
            for(int i=0;i<pinyin.length;i++){
                for (int j=0;j<pinyin[i].length;j++){
                    System.out.print(pinyin[i][j]+",");
                }
                System.out.println(" ");
            }


    }
    public static String[][]  hanziToPinyinArr(String hanzi){
        //输出格式设置
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        /**
         * 输出大小写设置
         *
         * LOWERCASE:输出小写
         * UPPERCASE:输出大写
         */
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);

        /**
         * 输出音标设置
         *
         * WITH_TONE_MARK:直接用音标符(必须设置WITH_U_UNICODE,否则会抛出异常)
         * WITH_TONE_NUMBER:1-4数字表示音标
         * WITHOUT_TONE:没有音标
         */
        format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

        /**
         * 特殊音标ü设置
         *
         * WITH_V:用v表示ü
         * WITH_U_AND_COLON:用"u:"表示ü
         * WITH_U_UNICODE:直接用ü
         */
        format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

        char[] hanYuArr = hanzi.trim().toCharArray();
        String[][] pinYin = new String[hanYuArr.length][];

        try {
            for (int i = 0, len = hanYuArr.length; i < len; i++) {
                //匹配是否是汉字
                if (Character.toString(hanYuArr[i]).matches("[\\u4E00-\\u9FA5]+")) {

                    //如果是多音字,返回多个拼音
                    String[] pys = PinyinHelper.toHanyuPinyinStringArray(hanYuArr[i], format);
//                    String[] pys = PinyinHelper.toGwoyeuRomatzyhStringArray(hanYuArr[i]);
//                    String[] pys = PinyinHelper.toGwoyeuRomatzyhStringArray(hanYuArr[i]);

                    pinYin[i]=pys;
                } else {
                    pinYin[i]=new String[0];
                }
            }
        } catch (Exception e){
            e.printStackTrace();
        }
//        catch ( BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
//            badHanyuPinyinOutputFormatCombination.printStackTrace();
//        }
        return pinYin;

    }

}

 类似资料: