zoukankan      html  css  js  c++  java
  • JAVA实现汉字转拼音

    两个工具包都可以实现:pinyin4j/JPinyin

    pinyin4j

    第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想

      

    package edu.ws;
    
    
    import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
    
    /**
     * pinyin4j汉字转拼音工具类
     */
    public class ChangeToPinYin {
    
        //pinyin4j格式类
        private HanyuPinyinOutputFormat format = null;
        //拼音字符串数组
        private String[] pinyin;
    
        //通过构造方法进行初始化
        public ChangeToPinYin() {
            format = new HanyuPinyinOutputFormat();
            /*
             * 设置需要转换的拼音格式
             * 以天为例
             * HanyuPinyinToneType.WITHOUT_TONE 转换为tian
             * HanyuPinyinToneType.WITH_TONE_MARK 转换为tian1
             * HanyuPinyinVCharType.WITH_U_UNICODE 转换为tiān
             */
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            pinyin = null;
        }
    
    
        /**
         * 对单个字进行转换
         *
         * @param pinYinStr 需转换的汉字字符串
         * @return 拼音字符串数组
         */
        public String getCharPinYin(char pinYinStr) {
            try {
                //执行转换
                pinyin = PinyinHelper.toHanyuPinyinStringArray(pinYinStr, format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            //pinyin4j规则,当转换的符串不是汉字,就返回null
            if (pinyin == null) {
                return null;
            }
            //多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音
            return pinyin[0];
        }
    
    
        /**
         * 对单个字进行转换
         *
         * @param pinYinStr
         * @return
         */
        public String getStringPinYin(String pinYinStr) {
            StringBuffer sb = new StringBuffer();
            String tempStr = null;
            //循环字符串
            for (int i = 0; i < pinYinStr.length(); i++) {
                tempStr = this.getCharPinYin(pinYinStr.charAt(i));
                if (tempStr == null) {
                    //非汉字直接拼接
                    sb.append(pinYinStr.charAt(i));
                } else {
                    sb.append(tempStr);
                }
            }
            return sb.toString();
        }
    }
    View Code

    测试:

    package edu.ws;
    
    
    
    public class Test {
    
        public static void main(String[] args) {
            new ToPinYinTest().changePinYinTest();
            new ToPinYinTest().changechar();
        }
    
    
        static class ToPinYinTest {
            private ChangeToPinYin changeToPinYin;
            public void changePinYinTest(){
                String str = "你在做什么?what are you doing?";
                System.out.println(changeToPinYin.getStringPinYin(str));
            }
            public void changechar(){
                char c = '你';
                System.out.println(changeToPinYin.getCharPinYin(c));
            }
        }
    }
    View Code

     

    JPinyin

    第二个方法使用JPinyin,说是在pinyin4j的jar上进行了优化,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能,下面一段代码简单列举了下汉字转换拼音及简体转换繁体

    package edu.ws;
    
    
    import com.github.stuxuhai.jpinyin.ChineseHelper;
    import com.github.stuxuhai.jpinyin.PinyinFormat;
    import com.github.stuxuhai.jpinyin.PinyinHelper;
    
    public class ChangeToPinYinJP {
    
    
        /**
         * 转换为有声调的拼音字符串
         *
         * @param pinYinStr 汉字
         * @return 有声调的拼音字符串
         */
    
        public 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 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 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 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 boolean checkPinYin(char pinYinStr) {
            boolean check = false;
            try {
                check = PinyinHelper.hasMultiPinyin(pinYinStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return check;
        }
    
    
        /**
         * 简体转换为繁体
         *
         * @param pinYinStr
         * @return
         */
    
        public String changeToTraditional(String pinYinStr) {
            String tempStr = null;
            try {
                tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return tempStr;
        }
    
    
        /**
         * 繁体转换为简体
         *
         * @param pinYinSt
         * @return
         */
    
        public 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 = "重慶 most input";
    
    // ChangeToPinYinJP jp = new ChangeToPinYinJP();
    
    // System.out.println(jp.changeToSimplified(str));
    
    // System.out.println(jp.checkPinYin('重'));
    
    // }
    
    }
    View Code

    这里只是简单的介绍了下最基本的功能,有兴趣的可以自行去了解。

  • 相关阅读:
    hiho150周
    hdu1011
    hiho1055/hdu1561
    bat脚本启动exe并打开文件后退出 + 中文乱码
    hiho1080
    hiho1079
    java异常处理——基础篇
    找不到要编译的文件——path环境变量配置
    MVC——studying
    轻松搞定EasyUI
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/12796588.html
Copyright © 2011-2022 走看看