Java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的四種方案
01 引言
在Java開發(fā)中,處理中文拼音轉(zhuǎn)換是常見卻棘手的需求——無論是智能搜索、數(shù)據(jù)排序,還是拼音首字母檢索。面對多音字、性能瓶頸、內(nèi)存占用等問題,開發(fā)者該如何選擇?
今天分享四種工具應(yīng)對不同場景的漢字轉(zhuǎn)拼音功能!
02 TinyPinyin
輕量級、高效的漢字轉(zhuǎn)拼音庫,不依賴任何外部詞典文件。具有體積小(約60KB)、速度快、支持多音字(需詞典)、支持拼音格式轉(zhuǎn)換的特性。
2.2 Maven依賴
<dependency>
<groupId>com.github.promeg</groupId>
<artifactId>tinypinyin</artifactId>
<version>2.0.3</version>
</dependency>
2.3 基本使用
@Test
void test01() {
Pinyin.init(Pinyin.newConfig().with(CnCityDict.getInstance()));
String pinyin = Pinyin.toPinyin("中國", " ");
System.out.println(pinyin); // ZHONG GUO
String pinyin1 = Pinyin.toPinyin('中');
System.out.println(pinyin1); // ZHONG
System.out.println(Pinyin.isChinese('中')); // true
System.out.println(Pinyin.isChinese('C')); // false
}
主要功能就是將漢字轉(zhuǎn)成拼音,并通過指定的分隔符分開,還可以判斷字符是否為漢字。功能非常簡單,基本的漢字轉(zhuǎn)拼音已經(jīng)夠用了。
多音字的處理需要定義自己的詞典。我們看看內(nèi)置的詞典庫CnCityDict

其實(shí)內(nèi)部就是一個(gè)詞典庫,通過Map映射,我們可以自定義實(shí)現(xiàn)。
03 JPinyin
功能豐富的拼音轉(zhuǎn)換工具,支持多音字、簡繁體轉(zhuǎn)換。
3.1 Maven依賴
<dependency>
<groupId>com.github.stuxuhai</groupId>
<artifactId>jpinyin</artifactId>
<version>1.1.8</version>
</dependency>
3.2 基本使用
@Test
void test02() throws PinyinException {
// 轉(zhuǎn)換為帶聲調(diào)拼音
String pinyin1 = PinyinHelper.convertToPinyinString(
"重慶銀行", " ", PinyinFormat.WITH_TONE_MARK);
System.out.println(pinyin1); // zhòng qìng yín háng
// 轉(zhuǎn)換為數(shù)字聲調(diào)
String pinyin2 = PinyinHelper.convertToPinyinString(
"重慶銀行", " ", PinyinFormat.WITH_TONE_NUMBER);
System.out.println(pinyin2); // zhong4 qing4 yin2 hang2
// 不帶聲調(diào)
String pinyin3 = PinyinHelper.convertToPinyinString(
"重慶銀行", " ", PinyinFormat.WITHOUT_TONE);
System.out.println(pinyin3); // zhong qing yin hang
// 獲取拼音首字母
String shortPinyin = PinyinHelper.getShortPinyin("你好精神小伙");
System.out.println(shortPinyin); // nhjsxh
// 檢查是否為多音字
String[] duoyin = PinyinHelper.convertToPinyinArray('重');
for (String py : duoyin) {
System.out.println(py); // zhòng, chóng
}
}
該工具內(nèi)置支持多音字,支持聲調(diào)。
04 Pinyin4j
老牌的拼音轉(zhuǎn)換庫,功能全面但相對較重。
4.1 Maven依賴
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
4.2 基本使用
@Test
void test03() throws BadHanyuPinyinOutputFormatCombination {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
// 配置輸出格式
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不帶聲調(diào)
format.setVCharType(HanyuPinyinVCharType.WITH_V); // 使用v表示ü
String[] duoyin = PinyinHelper.toHanyuPinyinStringArray('重', format);
for (String py : duoyin) {
System.out.println(py); // zhong, chong
}
String hanYuPinyinString = PinyinHelper.toHanYuPinyinString("中國國歌", format, " ", true);
System.out.println(hanYuPinyinString); // zhong guo guoge
String[] duoyin2 = PinyinHelper.toTongyongPinyinStringArray('重');
for (String py : duoyin2) {
System.out.println(py);// jhong4, chong2
}
}
Pinyin4j到目前位置已經(jīng)9年沒有更新了。支持聲調(diào)、v與ü的表示。支持多音字,以及其他拼音系統(tǒng)。

05 HanLP
HanLP是一系列模型與算法組成的NLP工具包,目標(biāo)是普及自然語言處理在生產(chǎn)環(huán)境中的應(yīng)用。HanLP具備功能完善、性能高效、架構(gòu)清晰、語料時(shí)新、可自定義的特點(diǎn)。其中漢字轉(zhuǎn)拼音只是其中一個(gè)小工具。
5.1 Maven依賴
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.6</version>
</dependency>
5.2 基礎(chǔ)使用
@Test
void test04() {
List<Pinyin> list = HanLP.convertToPinyinList("重");
for (Pinyin pinyin : list) {
System.out.println(pinyin.getPinyinWithoutTone());
System.out.println(pinyin.getPinyinWithToneMark());
System.out.println(pinyin.getFirstChar());
System.out.println(pinyin.getShengmu());
System.out.println(pinyin.getYunmu());
System.out.println(pinyin.getTone());
System.out.println(pinyin.getHead());
System.out.println("-------------------");
}
String pinyinString = HanLP.convertToPinyinString("重載不是重任", " ", false);
System.out.println(pinyinString);
System.out.println(HanLP.convertToTraditionalChinese("用筆記本電腦寫程序"));
System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當(dāng)上皇后,就能買士多啤梨慶祝了」"));
}

HanLP可以將漢字轉(zhuǎn)成Pinyin對象,然后可以獲取拼音、聲母、韻母、首字母、頭信息等,還可以簡繁體轉(zhuǎn)化。雖然能在語義中識別多音字,但不能直接獲取多音字的拼音。
06 小結(jié)
漢字轉(zhuǎn)拼音雖是小功能,卻直接影響用戶體驗(yàn)和系統(tǒng)性能。本文分享的4款工具各有優(yōu)缺點(diǎn),可以應(yīng)對不同的場景,大家可以根據(jù)需要選擇。掌握這些框架,讓中文處理不再是技術(shù)痛點(diǎn),而是產(chǎn)品亮點(diǎn)。
以上就是Java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的四種方案的詳細(xì)內(nèi)容,更多關(guān)于Java漢字轉(zhuǎn)拼音的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)將HTML文件與字符串轉(zhuǎn)換為圖片
在 Java 開發(fā)中,我們經(jīng)常會遇到將 HTML 內(nèi)容轉(zhuǎn)換為圖片的需求,本文小編就來和大家詳細(xì)講講如何使用 Free Spire.Doc for Java 庫來實(shí)現(xiàn)這一功能吧2025-08-08
Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
java-jwt通過公鑰字符串驗(yàn)證解析token方式
本文示例如何將公鑰字符串轉(zhuǎn)換為RSAPublicKey對象以校驗(yàn)JWT token,解決了Java-JWT庫中公鑰格式不匹配的問題,并提供代碼測試方法2025-08-08
Java形參和實(shí)參的實(shí)例之Integer類型與Int類型用法說明
這篇文章主要介紹了Java形參和實(shí)參的實(shí)例之Integer類型與Int類型用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

