java中文转换为拼音的pinyin4j学习笔记

来源:互联网 发布:网络服务器拓扑图标 编辑:程序博客网 时间:2024/04/29 20:13

突然想到火车票12306网站上在输入地名时,输入拼音也能提示中文名称,可见项目中将中文转换成拼音的情况还是有的,于是网上搜索了下,法相一个“pinyin4j”的java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。

看了几篇简单介绍和使用的帖子,自己也有了想亲身实现一把的冲动哈,嘿嘿以下就是我的学习和实现过程:

1. pinyin4j库的下载地址:官方下载地址 目前最新的版本是2.5.0

2. 成功下载后解压截图:



doc目录 : pinyin4japi文档

lib目录 : pinyin4jjar

src目录 : pinyin4j的源代码

下面的三个txt文件就是他的更新日志、说明相关的

打开doc目录,双击index.html文件,

根据网上文章实现,我们只要关注HanyuPinyinOutputFormat PinyinHelper等我用红框画出来的几个类即可

3 HanyuPinyinCaseType、HanyupinyinToneType、HanyuPinyinVCharType的介绍

在HanyuPinyinOutputFormat类的api中,最先说明了他的三个关键属性,caseType toneType vCharType

其中:

HanyuPinyinCaseType类中包含两个常量属性:LOWERCASE 和 UPPERCASE ,顾名思义就是大小写,即转换后的汉语拼音是大写还是小写的属性设置;

HanyuPinyinToneType类中包含了三个常量属性:

    WITH_TONE_NUMBER (以数字代替声调的显示格式)

    WITHOUT_TONE (无声调格式)

    WITH_TONE_MARK (有声调格式)


HanyuPinyinVCharType类中包含三个常量属性:(就是遇到v u 和unicode的ü  显示方式

    WITH_V                                v

    WITH_U_UNICODE              ü

    WITH_U_AND_COLON        u


汉子转换成拼音format格式设置就是这三个属性,当我们设置好我们想要的转换格式后,就可以开始写代码了,当然真正转换的方法是PinyinHelper类,我们可以使用其中的很多方法来完成转换,如截图



我们使用其中的toHanyuPinyinStringArray(char,outformat)方法。

4. 开始编码工作,自己动手实现下,哈哈!!!

标准的固话程序,先创建个工程,然后建个包,在创建个class。。。。。。(哈哈)

根据上文的介绍,首先创建个HanyuPinyinOutputFormat类,然后设置好三个输出格式,具体代码如下:


public class TransChineseWord {/** * 中文转换拼音方法,使用pinyin4j * @param string 带转换的字符串 * @return 拼音字符串 * @throws BadHanyuPinyinOutputFormatCombination */public static String transPinyin(String string) throws BadHanyuPinyinOutputFormatCombination{// 创建formatHanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();// 设置format为小写的格式format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 设置format为带音调的格式format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 设置format为ü的显示格式format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);// 将string转换成char数组char[] preTransChars = string.toCharArray();// 定义一个接收转换后的StringBuilder变量StringBuilder outputBuilder = new StringBuilder();// forint length = preTransChars.length;for(int i=0;i<length;i++){// 如果当前字符是中文,将转换成汉语拼音字符数组if(Character.toString(preTransChars[i]).matches("[\u4E00-\u9FA5]+")){String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(preTransChars[i], format);outputBuilder.append(pinyins[0]).append(" ");}else{// 如果不是中文,则不转换直接拼接outputBuilder.append(Character.toString(preTransChars[i]));}}return outputBuilder.toString();}public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {String testString = "使用pinyin4j类库将中文转换成汉语拼音的demo实例!";String outputString = transPinyin(testString);System.out.println(outputString);}}


右击runas运行结果显示为:

shi yong pinyin4jlei ku jiang zhong wen zhuan huan cheng han yu pin yin de demoshi li !


但是,当我把代码中的无音调改为有音调格式后

// 设置format为带音调的格式format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

运行结果为:

sh? yòng pinyin4jlèi kù jiāng zhōng wén zhu?n huàn chéng hàn y? pīn yīn de demoshí lì !


可能是我本地字体库里面缺少对应的音标字符字体吧,不管怎么说,将中文转换成汉语拼音就是这么简单,只用了解了相关的api,实现还是很简单的哈。

好了,学习笔记就这些,记录下来留着方便以后用得到的时候拿出来。





0 0
原创粉丝点击