Java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的四種方案
01 引言
在Java開(kāi)發(fā)中,處理中文拼音轉(zhuǎn)換是常見(jiàn)卻棘手的需求——無(wú)論是智能搜索、數(shù)據(jù)排序,還是拼音首字母檢索。面對(duì)多音字、性能瓶頸、內(nèi)存占用等問(wèn)題,開(kāi)發(fā)者該如何選擇?
今天分享四種工具應(yīng)對(duì)不同場(chǎng)景的漢字轉(zhuǎn)拼音功能!
02 TinyPinyin
輕量級(jí)、高效的漢字轉(zhuǎn)拼音庫(kù),不依賴任何外部詞典文件。具有體積?。s60KB)、速度快、支持多音字(需詞典)、支持拼音格式轉(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("中國(guó)", " ");
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)成拼音,并通過(guò)指定的分隔符分開(kāi),還可以判斷字符是否為漢字。功能非常簡(jiǎn)單,基本的漢字轉(zhuǎn)拼音已經(jīng)夠用了。
多音字的處理需要定義自己的詞典。我們看看內(nèi)置的詞典庫(kù)CnCityDict

其實(shí)內(nèi)部就是一個(gè)詞典庫(kù),通過(guò)Map映射,我們可以自定義實(shí)現(xiàn)。
03 JPinyin
功能豐富的拼音轉(zhuǎn)換工具,支持多音字、簡(jiǎ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)換庫(kù),功能全面但相對(duì)較重。
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("中國(guó)國(guó)歌", 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年沒(méi)有更新了。支持聲調(diào)、v與ü的表示。支持多音字,以及其他拼音系統(tǒng)。

05 HanLP
HanLP是一系列模型與算法組成的NLP工具包,目標(biāo)是普及自然語(yǔ)言處理在生產(chǎn)環(huán)境中的應(yīng)用。HanLP具備功能完善、性能高效、架構(gòu)清晰、語(yǔ)料時(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("用筆記本電腦寫(xiě)程序"));
System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當(dāng)上皇后,就能買士多啤梨慶祝了」"));
}

HanLP可以將漢字轉(zhuǎn)成Pinyin對(duì)象,然后可以獲取拼音、聲母、韻母、首字母、頭信息等,還可以簡(jiǎn)繁體轉(zhuǎn)化。雖然能在語(yǔ)義中識(shí)別多音字,但不能直接獲取多音字的拼音。
06 小結(jié)
漢字轉(zhuǎn)拼音雖是小功能,卻直接影響用戶體驗(yàn)和系統(tǒng)性能。本文分享的4款工具各有優(yōu)缺點(diǎn),可以應(yīng)對(duì)不同的場(chǎng)景,大家可以根據(jù)需要選擇。掌握這些框架,讓中文處理不再是技術(shù)痛點(diǎn),而是產(chǎn)品亮點(diǎn)。
以上就是Java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的四種方案的詳細(xì)內(nèi)容,更多關(guān)于Java漢字轉(zhuǎn)拼音的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot3.0新特性全面解析與應(yīng)用實(shí)戰(zhàn)
Spring Boot 3.0作為Spring生態(tài)系統(tǒng)的一個(gè)重要里程碑,帶來(lái)了眾多令人興奮的新特性和改進(jìn),本文將深入解析Spring Boot 3.0的核心變化,并通過(guò)實(shí)戰(zhàn)示例展示如何在項(xiàng)目中應(yīng)用這些新特性,需要的朋友可以參考下2025-07-07
SpringBoot中六種批量更新Mysql的方式效率對(duì)比分析
文章比較了MySQL大數(shù)據(jù)量批量更新的多種方法,指出REPLACE INTO和ON DUPLICATE KEY效率最高但存在數(shù)據(jù)風(fēng)險(xiǎn),MyBatis-Plus分批更新較優(yōu),CASE WHEN因循環(huán)多效率較低,建議根據(jù)項(xiàng)目限制選擇合適方案并分批處理以避免SQL阻塞2025-07-07
java 實(shí)現(xiàn)文件編碼檢測(cè)的幾種方式匯總
在實(shí)際開(kāi)發(fā)中,我們常常涉及某些場(chǎng)景需要對(duì)文件的讀取,但是因?yàn)椴恢谰唧w的編碼格式,導(dǎo)致讀取到的文件內(nèi)容亂碼,因此在讀取文件內(nèi)容之前,需要解析獲取文件的編碼,這樣讀取的內(nèi)容就不會(huì)出現(xiàn)亂碼了,下面是常見(jiàn)的幾種獲取文件編碼的方式,感興趣的朋友一起看看吧2025-09-09
Java用BigDecimal解決double類型相減時(shí)可能存在的誤差
這篇文章主要介紹了Java用BigDecimal解決double類型相減時(shí)可能存在的誤差,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
數(shù)據(jù)結(jié)構(gòu)與算法之手撕排序算法
排序算法看似簡(jiǎn)單,其實(shí)不同的算法中蘊(yùn)涵著經(jīng)典的算法策略。通過(guò)熟練掌握排序算法,就可以掌握基本的算法設(shè)計(jì)思想,本文主要介紹了Java中的排序算法,需要的朋友歡迎閱讀2023-04-04
java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式
這篇文章主要為大家介紹了java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Java雙向鏈表按照順序添加節(jié)點(diǎn)的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java雙向鏈表按照順序添加節(jié)點(diǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

