java 城市多音字处理

1.需求

对城市名称转化为拼音的时候,当遇到多音字城市的时候,转化拼音就不是我们想要的了。

使用  pinyin4j 无法直接解决这个问题。 。网上有很多维护多音字信息的,觉得麻烦。

如:

长沙 ====>"zhangsha"  
厦门===>"shamen"  
重庆===>"zhongqing"

2.导入 jpinyin

版本自选,

  <!-- https://mvnrepository.com/artifact/com.github.stuxuhai/jpinyin -->
        <dependency>
            <groupId>com.github.stuxuhai</groupId>
            <artifactId>jpinyin</artifactId>
            <version>1.1.8</version>
        </dependency>

3. 直接创建工具类(不需要其他操作)

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;

    }



}

4. 直接测试代码

    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. 源码分析(没兴趣的看到4就行了

5.1. 字典对应信息

分别是:从上到下分别是

  • 1. 繁体-简体对应表;
  • 2.多音字,
  • 3.带音标的拼音

5.2 6个处理类

5.3 处理模式

点开

com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource

有三个方法分别加载了这几个资源

然后通过

 

com.github.stuxuhai.jpinyin.ChineseHelper 

 通过一个键值对获取。加载处理而已。

 

其他的方式都一样。有兴趣的可以自己看看(将字典加载到map,然后通过输入的值,去进行判断。获取需要的值

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值