Java实战之城市多音字处理
一、需求
对城市名称转化为拼音的时候,当遇到多音字城市的时候,转化拼音就不是我们想要的了。
使用 pinyin4j 无法直接解决这个问题。 。网上有很多维护多音字信息的,觉得麻烦。
如:
长沙 ====>"zhangsha" 厦门===>"shamen" 重庆===>"zhongqing"
二、导入 jpinyin
版本自选
<!-- https://mvnrepository.com/artifact/com.github.stuxuhai/jpinyin -->
<dependency>
<groupId>com.github.stuxuhai</groupId>
<artifactId>jpinyin</artifactId>
<version>1.1.8</version>
</dependency>
三、直接创建工具类(不需要其他操作)
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 {
/**
* 转换为有声调的拼音字符串
*
* @param pinYinStr 汉字
* @return 有声调的拼音字符串
*/
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;
}
/**
* 转换为数字声调字符串
*
* @param pinYinStr 需转换的汉字
* @return 转换完成的拼音字符串
*/
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;
}
/**
* 转换为不带音调的拼音字符串
*
* @param pinYinStr 需转换的汉字
* @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;
}
/**
* 转换为每个汉字对应拼音首字母字符串
*
* @param pinYinStr 需转换的汉字
* @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;
}
/**
* 简体转换为繁体
*
* @param pinYinStr
* @return
*/
public static String changeToTraditional(String pinYinStr) {
String tempStr = null;
try {
tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
/**
* 繁体转换为简体
*
* @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("转换为有声调的拼音字符串:"+changeToMarkPinYin(str));
System.out.println("转换为不带音调的拼音字符串:"+changeToTonePinYin(str));
String strFanTi="誰是程序員";
System.out.println("繁体转换为简体:"+changeToSimplified(strFanTi));
System.out.println("重"+"重是否是多音字:"+checkPinYin('重'));
System.out.println("厦"+"是否是多音字:"+checkPinYin('厦'));
System.out.println("鼠"+"是否是多音字:"+checkPinYin('鼠'));
}
输出结果,下面不同字的中间是否有空格,这个可以自己设置的

五、源码分析
5.1 字典对应信息
分别是:从上到下分别是
1.繁体-简体对应表
2.多音字
3.带音标的拼音

5.2 6个处理类

5.3 处理模式
点开
com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource
有三个方法分别加载了这几个资源

然后通过
com.github.stuxuhai.jpinyin.ChineseHelper
通过一个键值对获取。加载处理而已。

到此这篇关于Java实战之城市多音字处理的文章就介绍到这了,更多相关java城市多音字处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Boot 整合持久层之JdbcTemplate
持久层是 Java EE 中访问数据库的核心操作,Spring Boot 中对常见的持久层框架都提供了自动化配置,例如 JdbcTemplate 、 JPA 等,Mybatis 的自动化配置则是 Mybatis 官方提供的2022-08-08
IntelliJ IDEA 安装 Grep Console插件 自定义控制台输出多颜色格式功能
由于Intellij idea不支持显示ascii颜色,grep-console插件能很好的解决这个问题,下面就以开发JavaEE项目中,结合Log4j配置多颜色日志输出功能,感兴趣的朋友一起看看吧2020-05-05
Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析
这篇文章主要介绍了Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03
spring中在xml配置中加载properties文件的步骤
这篇文章主要介绍了在spring中如何在xml配置中加载properties文件,本文分步骤给大家介绍在XML配置中加载properties文件的方法,需要的朋友可以参考下2023-07-07


最新评论