java城市多音字处理 Java实战之城市多音字处理
litGrey 人气:3想了解Java实战之城市多音字处理的相关内容吗,litGrey在本文为您仔细讲解java城市多音字处理的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java城市多音字处理,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
通过一个键值对获取。加载处理而已。
加载全部内容