欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实战之城市多音字处理

程序员文章站 2022-03-16 10:06:14
一、需求对城市名称转化为拼音的时候,当遇到多音字城市的时候,转化拼音就不是我们想要的了。使用 pinyin4j 无法直接解决这个问题。 。网上有很多维护多音字信息的,觉得麻烦。如:长沙 ====>...

一、需求

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

使用  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('鼠'));
    }

输出结果,下面不同字的中间是否有空格,这个可以自己设置的

Java实战之城市多音字处理

五、源码分析

5.1 字典对应信息

分别是:从上到下分别是

1.繁体-简体对应表

2.多音字

3.带音标的拼音

Java实战之城市多音字处理

5.2 6个处理类

Java实战之城市多音字处理

5.3 处理模式

点开

com.github.stuxuhai.jpinyin.pinyinresource#getpinyinresource

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

Java实战之城市多音字处理

然后通过

com.github.stuxuhai.jpinyin.chinesehelper 

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

Java实战之城市多音字处理

到此这篇关于java实战之城市多音字处理的文章就介绍到这了,更多相关java城市多音字处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!