Java實(shí)戰(zhàn)之城市多音字處理
一、需求
對(duì)城市名稱轉(zhuǎn)化為拼音的時(shí)候,當(dāng)遇到多音字城市的時(shí)候,轉(zhuǎn)化拼音就不是我們想要的了。
使用 pinyin4j 無(wú)法直接解決這個(gè)問(wèn)題。 。網(wǎng)上有很多維護(hù)多音字信息的,覺(jué)得麻煩。
如:
長(zhǎng)沙 ====>"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 = "長(zhǎng)沙市";
System.out.println("轉(zhuǎn)換為有聲調(diào)的拼音字符串:"+changeToMarkPinYin(str));
System.out.println("轉(zhuǎn)換為不帶音調(diào)的拼音字符串:"+changeToTonePinYin(str));
String strFanTi="誰(shuí)是程序員";
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)開(kāi)
com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource
有三個(gè)方法分別加載了這幾個(gè)資源

然后通過(guò)
com.github.stuxuhai.jpinyin.ChineseHelper
通過(guò)一個(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開(kāi)發(fā)條形碼和驗(yàn)證碼
- java sleep()和wait()的區(qū)別點(diǎn)總結(jié)
- JavaScript控制臺(tái)的更多功能
- JavaScript使用canvas繪制坐標(biāo)和線
- Java實(shí)戰(zhàn)之敏感詞過(guò)濾器
- Java實(shí)戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng)
- Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比
- Java多線程之Disruptor入門
相關(guān)文章
Spring Boot 整合持久層之JdbcTemplate
持久層是 Java EE 中訪問(wèn)數(shù)據(jù)庫(kù)的核心操作,Spring Boot 中對(duì)常見(jiàn)的持久層框架都提供了自動(dòng)化配置,例如 JdbcTemplate 、 JPA 等,Mybatis 的自動(dòng)化配置則是 Mybatis 官方提供的2022-08-08
Java自動(dòng)化工具Ant的基礎(chǔ)使用教程
這篇文章主要介紹了Java自動(dòng)化工具Ant的基礎(chǔ)使用教程,例子在Windows系統(tǒng)下操作演示,講解了Ant基本的文件操作和屬性,需要的朋友可以參考下2016-02-02
IntelliJ IDEA 安裝 Grep Console插件 自定義控制臺(tái)輸出多顏色格式功能
由于Intellij idea不支持顯示ascii顏色,grep-console插件能很好的解決這個(gè)問(wèn)題,下面就以開(kāi)發(fā)JavaEE項(xiàng)目中,結(jié)合Log4j配置多顏色日志輸出功能,感興趣的朋友一起看看吧2020-05-05
Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫(kù)表的底層原理解析
這篇文章主要介紹了Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫(kù)表的底層原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
JAVA 獲取系統(tǒng)當(dāng)前時(shí)間實(shí)例代碼
這篇文章主要介紹了JAVA 獲取系統(tǒng)當(dāng)前時(shí)間實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
spring中在xml配置中加載properties文件的步驟
這篇文章主要介紹了在spring中如何在xml配置中加載properties文件,本文分步驟給大家介紹在XML配置中加載properties文件的方法,需要的朋友可以參考下2023-07-07
淺析Java中關(guān)鍵詞volatile底層的實(shí)現(xiàn)原理
在 Java 并發(fā)編程中,有 3 個(gè)最常用的關(guān)鍵字:synchronized、ReentrantLock 和 volatile,這篇文章主要來(lái)和大家聊聊volatile底層的實(shí)現(xiàn)原理,感興趣的可以了解下2024-02-02
Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法
本篇文章主要介紹了Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Spring Boot Filter 過(guò)濾器的使用方式
這篇文章主要介紹了Spring Boot Filter 過(guò)濾器的使用方式,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

