最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)漢字轉(zhuǎn)拼音的四種方案

 更新時(shí)間:2025年12月26日 09:31:47   作者:SimonKing  
在Java開發(fā)中,處理中文拼音轉(zhuǎn)換是常見卻棘手的需求,無論是智能搜索、數(shù)據(jù)排序,還是拼音首字母檢索,面對多音字、性能瓶頸、內(nèi)存占用等問題,開發(fā)者該如何選擇,今天分享四種工具應(yīng)對不同場景,需要的朋友可以參考下

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)文章

  • Go?Java算法之交錯(cuò)字符串示例詳解

    Go?Java算法之交錯(cuò)字符串示例詳解

    這篇文章主要為大家介紹了Go?Java算法之交錯(cuò)字符串示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java實(shí)現(xiàn)將HTML文件與字符串轉(zhuǎ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 自定義類型處理器示例詳解

    Mybatis 自定義類型處理器示例詳解

    在某些情況下我們需要對類型做處理,例如數(shù)據(jù)存儲的是Long,程序里是BigDecimal,那么我們出庫入庫都需要做處理,此時(shí)就可以使用類型處理器,本文通過示例給大家介紹Mybatis 自定義類型處理器的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案

    Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了Mybatis 中Mapper使用package方式配置報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java詳細(xì)分析連接數(shù)據(jù)庫的流程

    Java詳細(xì)分析連接數(shù)據(jù)庫的流程

    Java數(shù)據(jù)庫連接,JDBC是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標(biāo)。我們通常說的JDBC是面向關(guān)系型數(shù)據(jù)庫的
    2022-05-05
  • java-jwt通過公鑰字符串驗(yàn)證解析token方式

    java-jwt通過公鑰字符串驗(yàn)證解析token方式

    本文示例如何將公鑰字符串轉(zhuǎn)換為RSAPublicKey對象以校驗(yàn)JWT token,解決了Java-JWT庫中公鑰格式不匹配的問題,并提供代碼測試方法
    2025-08-08
  • idea中VM options配置方式

    idea中VM options配置方式

    文章介紹了JVM的多個(gè)配置參數(shù),如堆內(nèi)存設(shè)置、線程棧大小、年輕代與年老代的配置等,其中包括標(biāo)準(zhǔn)參數(shù)和各種非標(biāo)準(zhǔn)參數(shù)(-X和-XX),并提到了它們對JVM性能和垃圾回收機(jī)制的影響,還區(qū)分了Client和Server模式
    2025-10-10
  • 詳解SpringMVC學(xué)習(xí)系列之國際化

    詳解SpringMVC學(xué)習(xí)系列之國際化

    這篇文章主要介紹了詳解SpringMVC學(xué)習(xí)系列之國際化,詳細(xì)的介紹了關(guān)于瀏覽器,Session,Cookie,URL請求的國際化的實(shí)現(xiàn),有興趣的可以了解一下
    2017-07-07
  • Java高頻面試題之海量數(shù)據(jù)處理分析

    Java高頻面試題之海量數(shù)據(jù)處理分析

    海量信息處理日益成為當(dāng)前程序員筆試面試中一個(gè)新的亮點(diǎn)。硬件擴(kuò)容是難滿足海量數(shù)據(jù)處理需要的,如何利用現(xiàn)有條件進(jìn)行海量信息處理?本文就來為大家解答一下
    2022-10-10
  • Java形參和實(shí)參的實(shí)例之Integer類型與Int類型用法說明

    Java形參和實(shí)參的實(shí)例之Integer類型與Int類型用法說明

    這篇文章主要介紹了Java形參和實(shí)參的實(shí)例之Integer類型與Int類型用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論

炉霍县| 武邑县| 子洲县| 兴安县| 安新县| 合阳县| 来凤县| 西丰县| 米泉市| 桐柏县| 容城县| 崇明县| 若羌县| 永吉县| 宁远县| 温宿县| 固镇县| 同德县| 乌审旗| 永嘉县| 安阳县| 绥宁县| 黑水县| 香港| 阿尔山市| 万宁市| 扎囊县| 偏关县| 应用必备| 招远市| 绥芬河市| 汶川县| 曲阳县| 平远县| 巢湖市| 花莲市| 开江县| 江油市| 三都| 惠来县| 资讯 |