pinyin4j 中文转拼音

 

pinyin4j的主页:http://pinyin4j.sourceforge.net/ 

pinyin4j是一个支持将中文转换到拼音的Java开源类库。 

 

A copy of http://sourceforge.net/projects/pinyin4j, then deploy it to maven central repository.

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

https://github.com/belerweb/pinyin4j

 

基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

复制代码
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray('单');
for (String s : pinyinArray) {
    System.out.println(s);
    /*
     dan1
     chan2
     shan4
     */
}
复制代码

 

 

格式支持

Pinyin4j支持拼音输出的格式化

复制代码
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyinArray = null;
try {
    pinyinArray = PinyinHelper.toHanyuPinyinStringArray('单', format);
} catch (BadHanyuPinyinOutputFormatCombination e) {
    e.printStackTrace();
}
for (String s : pinyinArray) {
    System.out.println(s);
    /*
     dān
     chán
     shàn
     */
}
复制代码

 

实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出空数组。参考下面的示例代码:

复制代码
import net.sourceforge.pinyin4j.*;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class Chinese2PY {
    public static void main(String[] args) {
        Hanyu hanyu = new Hanyu();
        // 中英文混合的一段文字
        String str = "荆溪白石出,Hello 天寒红叶稀。Android 山路元无雨,What's up?   空翠湿人衣。";
        String strPinyin = hanyu.getStringPinYin(str);
        System.out.println(strPinyin);
    }
}

class Hanyu {
    private HanyuPinyinOutputFormat format = null;
    private String[] pinyin;

    public Hanyu() {
        format = new HanyuPinyinOutputFormat();
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        pinyin = null;
    }

    //转换单个字符
    public String getCharacterPinYin(char c) {
        try {
            pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }

        // 如果c不是汉字,toHanyuPinyinStringArray会返回空数组
        if (pinyin == null || pinyin.length == 0) return null;
        // 只取一个发音,如果是多音字,仅取第一个发音
        return pinyin[0];

    }

    //转换一个字符串
    public String getStringPinYin(String str) {
        StringBuilder sb = new StringBuilder();
        String tempPinyin = null;
        for (int i = 0; i < str.length(); ++i) {
            tempPinyin = getCharacterPinYin(str.charAt(i));
            if (tempPinyin == null) {
                // 如果str.charAt(i)非汉字,则保持原样
                sb.append(str.charAt(i));
            } else {
                sb.append(tempPinyin);
            }
        }
        return sb.toString();
    }
}
复制代码

 

posted @   草木物语  阅读(502)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2019-05-27 mybatis 传递多个参数
点击右上角即可分享
微信分享提示