pinyin4j汉语拼音库的使用

pinyin4j是一个Java类库,用于将汉字转换为拼音。它包含PinyinHelper工具类和HanyuPinyinOutputFormat类来定义拼音输出格式。文章介绍了如何通过设置大小写、声调和ü的显示方式来转换和格式化拼音,并提供了代码示例进行全拼和首字母转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

pinyin4j库是一个将汉字转换为拼音(汉语拼音,罗马拼音等)的流行开源java类库,其中最常见的几个类有:

    net.sourceforge.pinyin4j.PinyinHelper;
    net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
    net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;

    PinyinHelper:提供实用方法,用于将中文(简体和繁体)转换为各种中文或罗马拼音 ;
    HanyuPinyinOutputFormat:定义如何将汉语拼音格式化输出;
    HanyuPinyinCaseType:拼音大小写设置;
    HanyuPinyinToneType:音调格式化设置;
    HanyuPinyinVCharType:这个类为'ü'的输出提供了几个选项。

maven依赖:

 <dependency>
    <groupId>com.belerweb</groupId>
     <artifactId>pinyin4j</artifactId>
     <version>2.5.0</version>
 </dependency>

二、使用PinyinHelper处理汉语拼音格式

方式一

static java.lang.String[] toHanyuPinyinStringArray(char ch) 方法将汉字转换成拼音,返回的是一个string字符串数组类型,即该汉字的所有读音。

方式二

static java.lang.String[] toHanyuPinyinStringArray(char ch, HanyuPinyinOutputFormat outputFormat) 方法将汉字转换成指定格式的拼音,返回的是一个string字符串数组类型,将该汉字的所有读音以指定的格式进行输出。

方式三

static java.lang.String toHanyuPinyinString(java.lang.String str, HanyuPinyinOutputFormat outputFormat, java.lang.String seperater) 方法将汉语按指定的格式和分隔符转换成拼音,遇到多音字时取第一个读音,返回指定间隔的拼音字符串。

三、创建HanyuPinyinOutputFormat对象处理拼音输出格式

 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

该对象有以下几个方法设置格式:

1)设置拼音的大小写: setCaseType(HanyuPinyinCaseType caseType)方法

HanyuPinyinCaseType.UPPERCASE:设置为大写,如:刘->LIU2

HanyuPinyinCaseType.LOWERCASE:设置为小写,如:刘->liu2

2)设置ü的显示方式:setVCharType(HanyuPinyinVCharType charType)方法

HanyuPinyinVCharType.WITH_U_AND_COLON:显示为u:(默认)

HanyuPinyinVCharType.WITH_V :显示为v

HanyuPinyinVCharType.WITH_U_UNICODE:显示为ü

3)设置声调显示方式:setToneType(HanyuPinyinToneType toneType)方法

HanyuPinyinToneType.WITH_TONE_NUMBER:设置数字声调(默认) ,如:刘->liu2

HanyuPinyinToneType.WITHOUT_TONE:设置不显示声调,如:刘->liu

HanyuPinyinToneType.WITH_TONE_MARK:设置显示声调,前提必须设置V如何显示,如:刘-> liú

四、实例

package com.daze.pinyin;

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 Pinyin4jUtil {
    private static String CHINESE_REGEX = "[\\u4E00-\\u9FA5]+";
    /**
     * @Description 获取全拼
     * @param chinese  中文
     * @return java.lang.String 全拼
     */
    public static String getAllPinyin(String chinese) {
        //输出格式设置
        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 = chinese.trim().toCharArray();
        StringBuilder pinYin = new StringBuilder();

        try {
            for (int i = 0, len = hanYuArr.length; i < len; i++) {
                //匹配是否是汉字
                if (Character.toString(hanYuArr[i]).matches(CHINESE_REGEX)) {
                    //如果是多音字,返回多个拼音,这里只取第一个
                    String[] pys = PinyinHelper.toHanyuPinyinStringArray(hanYuArr[i], format);
                    pinYin.append(pys[0]);
                } else {
                    pinYin.append(hanYuArr[i]);
                }
                if(i < len - 1){
                    pinYin.append(" ");
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
            badHanyuPinyinOutputFormatCombination.printStackTrace();
        }
        return pinYin.toString();
    }

    /**
     * @Description 获取首字母字
     * @param chinese 中文
     * @return java.lang.String
     */
    public static String getFirstPinYin(String chinese) {
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        StringBuilder firstPinyin = new StringBuilder();
        char[] hanyuArr = chinese.trim().toCharArray();
        try {
            for (int i = 0, len = hanyuArr.length; i < len; i++) {
                if(Character.toString(hanyuArr[i]).matches(CHINESE_REGEX)){
                    String[] pys = PinyinHelper.toHanyuPinyinStringArray(hanyuArr[i],format);
                    firstPinyin.append(pys[0].charAt(0));
                }else {
                    firstPinyin.append(hanyuArr[i]);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
            badHanyuPinyinOutputFormatCombination.printStackTrace();
        }
        return firstPinyin.toString();
    }

    public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {

        String pinYin = getAllPinyin("中华人民共和国万岁");
        String firstPinYin = getFirstPinYin("中华人民共和国万岁");
        String pinYin2 = PinyinHelper.toHanyuPinyinString("中华人民共和国万岁",new HanyuPinyinOutputFormat()," ");

        System.out.println("中华人民共和国万岁:"+pinYin);
        System.out.println("中华人民共和国万岁:"+firstPinYin);
        System.out.println("中华人民共和国万岁:"+pinYin2);

       
    }
}

转换结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值