Java實(shí)戰(zhàn)之城市多音字處理
一、需求
對(duì)城市名稱轉(zhuǎn)化為拼音的時(shí)候,當(dāng)遇到多音字城市的時(shí)候,轉(zhuǎn)化拼音就不是我們想要的了。
使用 pinyin4j 無法直接解決這個(gè)問題。 。網(wǎng)上有很多維護(hù)多音字信息的,覺得麻煩。
如:
長沙 ====>"zhangsha" 廈門===>"shamen" 重慶===>"zhongqing"
二、導(dǎo)入 jpinyin
版本自選
<!-- https://mvnrepository.com/artifact/com.github.stuxuhai/jpinyin --> <dependency> <groupId>com.github.stuxuhai</groupId> <artifactId>jpinyin</artifactId> <version>1.1.8</version> </dependency>
三、直接創(chuàng)建工具類(不需要其他操作)
import com.github.stuxuhai.jpinyin.ChineseHelper; import com.github.stuxuhai.jpinyin.PinyinFormat; import com.github.stuxuhai.jpinyin.PinyinHelper; /** * @Description: * @Date: 2021/4/27 16:26 * @Author: luch * @Version: 1.0 **/ public class ChangeToPinYinJPinYin { /** * 轉(zhuǎn)換為有聲調(diào)的拼音字符串 * * @param pinYinStr 漢字 * @return 有聲調(diào)的拼音字符串 */ public static String changeToMarkPinYin(String pinYinStr) { String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_MARK); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 轉(zhuǎn)換為數(shù)字聲調(diào)字符串 * * @param pinYinStr 需轉(zhuǎn)換的漢字 * @return 轉(zhuǎn)換完成的拼音字符串 */ public static String changeToNumberPinYin(String pinYinStr) { String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_NUMBER); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 轉(zhuǎn)換為不帶音調(diào)的拼音字符串 * * @param pinYinStr 需轉(zhuǎn)換的漢字 * @return 拼音字符串 */ public static String changeToTonePinYin(String pinYinStr) { String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, "", PinyinFormat.WITHOUT_TONE); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 轉(zhuǎn)換為每個(gè)漢字對(duì)應(yīng)拼音首字母字符串 * * @param pinYinStr 需轉(zhuǎn)換的漢字 * @return 拼音字符串 */ public static String changeToGetShortPinYin(String pinYinStr) { String tempStr = null; try { tempStr = PinyinHelper.getShortPinyin(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 檢查漢字是否為多音字 * * @param pinYinStr 需檢查的漢字 * @return true 多音字,false 不是多音字 */ public static boolean checkPinYin(char pinYinStr) { boolean check = false; try { check = PinyinHelper.hasMultiPinyin(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return check; } /** * 簡(jiǎn)體轉(zhuǎn)換為繁體 * * @param pinYinStr * @return */ public static String changeToTraditional(String pinYinStr) { String tempStr = null; try { tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 繁體轉(zhuǎn)換為簡(jiǎn)體 * * @param pinYinSt * @return */ public static String changeToSimplified(String pinYinSt) { String tempStr = null; try { tempStr = ChineseHelper.convertToSimplifiedChinese(pinYinSt); } catch (Exception e) { e.printStackTrace(); } return tempStr; } }
四、直接測(cè)試代碼
public static void main(String[] args) { String str = "長沙市"; System.out.println("轉(zhuǎn)換為有聲調(diào)的拼音字符串:"+changeToMarkPinYin(str)); System.out.println("轉(zhuǎn)換為不帶音調(diào)的拼音字符串:"+changeToTonePinYin(str)); String strFanTi="誰是程序員"; System.out.println("繁體轉(zhuǎn)換為簡(jiǎn)體:"+changeToSimplified(strFanTi)); System.out.println("重"+"重是否是多音字:"+checkPinYin('重')); System.out.println("廈"+"是否是多音字:"+checkPinYin('廈')); System.out.println("鼠"+"是否是多音字:"+checkPinYin('鼠')); }
輸出結(jié)果,下面不同字的中間是否有空格,這個(gè)可以自己設(shè)置的
五、源碼分析
5.1 字典對(duì)應(yīng)信息
分別是:從上到下分別是
1.繁體-簡(jiǎn)體對(duì)應(yīng)表
2.多音字
3.帶音標(biāo)的拼音
5.2 6個(gè)處理類
5.3 處理模式
點(diǎn)開
com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource
有三個(gè)方法分別加載了這幾個(gè)資源
然后通過
com.github.stuxuhai.jpinyin.ChineseHelper
通過一個(gè)鍵值對(duì)獲取。加載處理而已。
到此這篇關(guān)于Java實(shí)戰(zhàn)之城市多音字處理的文章就介紹到這了,更多相關(guān)java城市多音字處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring與disruptor集成的簡(jiǎn)單示例
- java基礎(chǔ)之NIO介紹及使用
- Java實(shí)戰(zhàn)之用Spring開發(fā)條形碼和驗(yàn)證碼
- java sleep()和wait()的區(qū)別點(diǎn)總結(jié)
- JavaScript控制臺(tái)的更多功能
- JavaScript使用canvas繪制坐標(biāo)和線
- Java實(shí)戰(zhàn)之敏感詞過濾器
- Java實(shí)戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng)
- Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比
- Java多線程之Disruptor入門
相關(guān)文章
java多線程編程之使用thread類創(chuàng)建線程
在Java中創(chuàng)建線程有兩種方法:使用Thread類和使用Runnable接口。在使用Runnable接口時(shí)需要建立一個(gè)Thread實(shí)例2014-01-01Spring如何更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象
這篇文章主要給大家介紹了關(guān)于Spring如何更簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象的相關(guān)資料,在Spring 中想要更簡(jiǎn)單的存儲(chǔ)和讀取對(duì)象的核?是使?注解,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06springboot寶塔簡(jiǎn)單部署的實(shí)現(xiàn)示例
通過使用Spring Boot,可以快速構(gòu)建出高效、可擴(kuò)展的應(yīng)用程序,而寶塔面板則提供了簡(jiǎn)單易用的網(wǎng)站管理和維護(hù)工具,本文將詳細(xì)介紹如何將Spring Boot應(yīng)用程序與寶塔面板進(jìn)行集成,實(shí)現(xiàn)自動(dòng)化部署、配置管理等操作2023-11-11基于Java+SpringBoot實(shí)現(xiàn)人臉識(shí)別搜索
人臉識(shí)別搜索技術(shù)作為現(xiàn)代計(jì)算機(jī)視覺領(lǐng)域的重要研究方向之一,已經(jīng)在多個(gè)領(lǐng)域展現(xiàn)出巨大的應(yīng)用潛力,隨著信息技術(shù)的飛速發(fā)展,人臉識(shí)別搜索在多個(gè)領(lǐng)域得到了廣泛關(guān)注和應(yīng)用,本文旨在探討人臉識(shí)別搜索技術(shù)的背景、原理以及其在實(shí)際應(yīng)用中的意義和挑戰(zhàn)2023-08-08Spring?Boot中使用Spring?Retry重試框架的操作方法
這篇文章主要介紹了Spring?Retry?在SpringBoot?中的應(yīng)用,介紹了RetryTemplate配置的時(shí)候,需要設(shè)置的重試策略和退避策略,需要的朋友可以參考下2022-04-04Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java實(shí)現(xiàn)獲取前、后N天日期的函數(shù)分享
本文給大家分享的是使用java實(shí)現(xiàn)的獲取當(dāng)前日期前后N天的函數(shù),非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-03-03