黑马程序员技术交流社区

标题: 【石家庄校区】使用java实现汉字与拼音转换 [打印本页]

作者: 张荫    时间: 2018-2-8 12:02
标题: 【石家庄校区】使用java实现汉字与拼音转换
本帖最后由 张荫 于 2018-2-8 12:04 编辑

有些时候我们需要用到用到汉字转换成拼音。下面就给大家推荐汉字转拼音的方案。
1使用pinyin4j
pinyin4j官网介绍:
Pinyin4j is a popular Java library supporting convertion between Chinese characters and most popular Pinyin systems. The output format of pinyin could be customized.

Since the software, pinyin4j published till today, it has been downloaded by 55,000 times and still couting 200+ every week!  
Pinyin4j是一个流行的Java库,支持汉字和最流行的拼音系统之间的转换。 拼音的输出格式可以自定义。

自从软件pinyin4j发布到今天,已经被下载了5.5万次,每周还要200多个!

官网地址:http://pinyin4j.sourceforge.net/

下面我们来看下如何使用pinyin4j:
1 我们可以直接下载jar或者引入maven依赖
jar下载:下载地址https://sourceforge.net/projects/pinyin4j/files/
maven引入:
[XML] 纯文本查看 复制代码
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>

如果下载jar包的话 双击时可以运行的GUI界面

可以发现我们输入的汉字都可以转换成拼音(后面还有声调)

基本用法:
[Java] 纯文本查看 复制代码
        String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('单');
                for(int i = 0; i < pinyinArray.length; ++i)
                {
                         System.out.println(pinyinArray);
                }
        }


输出:
dan1
chan2
shan4

这三种发音,后面的数字代表第几声。可以看到静态方法 toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果 toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null。

Pinyin4j支持拼音输出的格式化,比如,“黄”可以输出为“huang”、“huang2”、“huáng”等等,下面的代码就似是输出“huáng”的示例:
[Java] 纯文本查看 复制代码
HanyuPinyinOutputFormat format= new HanyuPinyinOutputFormat();

format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);               

String[] pinyinArray = null;

try
{
         pinyinArray = PinyinHelper.toHanyuPinyinStringArray('黄', format);
}
catch(BadHanyuPinyinOutputFormatCombination e)
{
         e.printStackTrace();
}

for(int i = 0; i < pinyinArray.length; ++i)
{
         System.out.println(pinyinArray);
}
下面给大家一个常用的工具类PinYinUtil:
[Java] 纯文本查看 复制代码
public class PinYinUtil {

         /**
     * 获取汉字串拼音首字母,英文字符不变
     *
     * @param chinese 汉字串
     * @return 汉语拼音首字母
     */
    public static String cn2FirstSpell(String chinese) {
            StringBuffer pybf = new StringBuffer();
            char[] arr = chinese.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < arr.length; i++) {
                    if (arr > 128) {
                            try {
                                    String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr, defaultFormat);
                                    if (_t != null) {
                                            pybf.append(_t[0].charAt(0));
                                    }
                            } catch (BadHanyuPinyinOutputFormatCombination e) {
                                    e.printStackTrace();
                            }
                    } else {
                            pybf.append(arr);
                    }
            }
            return pybf.toString().replaceAll("\\W", "").trim();
    }
   
    /**
     * 获取汉字串拼音,英文字符不变
     *
     * @param chinese 汉字串
     * @return 汉语拼音
     */
    public static String cn2Spell(String chinese) {
            StringBuffer pybf = new StringBuffer();
            char[] arr = chinese.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < arr.length; i++) {
                    if (arr > 128) {
                            try {
                                    pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr, defaultFormat)[0]);
                            } catch (BadHanyuPinyinOutputFormatCombination e) {
                                    e.printStackTrace();
                            }
                    } else {
                            pybf.append(arr);
                    }
            }
            return pybf.toString();
    }
        
}

测试:
[Java] 纯文本查看 复制代码
        public static void main(String[] args) {

                System.out.println("获取首字母方法-->cn2FirstSpell:"+PinYinUtil.cn2FirstSpell("黑马程序员"));
                System.out.println("获取首字母方法-->cn2Spell:"+PinYinUtil.cn2Spell("黑马程序员"));
        }

输出结果;
获取首字母方法-->cn2FirstSpell:hmcxy
获取获取全拼方法-->cn2Spell:heimachengxuyuan






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2