Java實(shí)戰(zhàn)之城市多音字處理
一、需求
對城市名稱轉(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è)漢字對應(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;
}
/**
* 簡體轉(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)換為簡體
*
* @param pinYinSt
* @return
*/
public static String changeToSimplified(String pinYinSt) {
String tempStr = null;
try {
tempStr = ChineseHelper.convertToSimplifiedChinese(pinYinSt);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
}
四、直接測試代碼
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)換為簡體:"+changeToSimplified(strFanTi));
System.out.println("重"+"重是否是多音字:"+checkPinYin('重'));
System.out.println("廈"+"是否是多音字:"+checkPinYin('廈'));
System.out.println("鼠"+"是否是多音字:"+checkPinYin('鼠'));
}
輸出結(jié)果,下面不同字的中間是否有空格,這個(gè)可以自己設(shè)置的

五、源碼分析
5.1 字典對應(yīng)信息
分別是:從上到下分別是
1.繁體-簡體對應(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è)鍵值對獲取。加載處理而已。

到此這篇關(guān)于Java實(shí)戰(zhàn)之城市多音字處理的文章就介紹到這了,更多相關(guān)java城市多音字處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 整合持久層之JdbcTemplate
持久層是 Java EE 中訪問數(shù)據(jù)庫的核心操作,Spring Boot 中對常見的持久層框架都提供了自動(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插件 自定義控制臺輸出多顏色格式功能
由于Intellij idea不支持顯示ascii顏色,grep-console插件能很好的解決這個(gè)問題,下面就以開發(fā)JavaEE項(xiàng)目中,結(jié)合Log4j配置多顏色日志輸出功能,感興趣的朋友一起看看吧2020-05-05
Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫表的底層原理解析
這篇文章主要介紹了Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫表的底層原理解析,本文給大家介紹的非常詳細(xì),對大家的學(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,這篇文章主要來和大家聊聊volatile底層的實(shí)現(xiàn)原理,感興趣的可以了解下2024-02-02
Spring boot 跳轉(zhuǎn)到j(luò)sp頁面的實(shí)現(xiàn)方法
本篇文章主要介紹了Spring boot 跳轉(zhuǎn)到j(luò)sp頁面的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04

