Java汉字转拼音pinyin4j用法详解
一、工具介绍
pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库;
1.功能
- 支持同一汉字有多个发音
- 还支持拼音的格式化输出,比如第几声之类的,
- 同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:
- pinyin4j的官方下载地址
2.目录结构及说明
- doc:pinyin4j的api文档
- lib:pinyin4j的jar包
- src:pinyin4j的源代码
- CHANGELOG.txt:pinyin4j的版本更新日志
- COPYING.txt:LICENSE说明
- README.txt:pinyin4j的概要介绍
3.原理
pinyin4j使用了一个.txt的文本文件(uicode_to_hanyu_pinyin.txt)用来存储汉字unicode编码与拼音的对应关系,通过读取该配置文件达到转换的目的。
该属性文件存储信息的基本格式如下:89E3(jie3,jie4,xie4)//(对应汉字”解”)89E3是汉字对应的unicode编码的16进制数,(jie3,jie4,xie4)是该汉字对应的三种读音(在汉语里有多音字)
说明pinyin4j支持多音字的处理pinyin4j的处理过程是这样的:
根据String的toCharArray方法得到每个字符(得到”解”字的unicode编码,实际上是35299,由于java中char和String都是unicode编码的可以直接转为int型的编码数据35299),然后利用Integer.toHexString(c1).toUpperCase()将其转换成16进制数[也就是89E3],通过读取配置文件得到“解”字的拼音(jie3,jie4,xie4),那么这里有三个拼音,pinyin4j的默认取值为第一个,也就是jie3[表示读jie,声调是三声]
二、pinyin4J使用
pinyin4j提供的工具类为PinyinHelper,里边提供了静态方法
-toHanyuPinyinString()(过时)
-toHanyuPinyinStringArray()
pinyin4j中有四个辅助类分别是:
-HanyuPinyinCaseType
-HanyuPinyinToneType
-HanyuPinyinVCharType
-HanyuPinyinOutputFormat
具体功能和用法见一下代码:
HanyuPinyinOutputFormatdefaultFormat=newHanyuPinyinOutputFormat(); //控制大小写 //UPPERCASE:大写(ZHONG) //LOWERCASE:小写(zhong) defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); //WITHOUT_TONE:无音标(zhong) //WITH_TONE_NUMBER:1-4数字表示英标(zhong4) //WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常)(zhòng) defaultFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER); //WITH_V:用v表示ü(nv) //WITH_U_AND_COLON:用"u:"表示ü(nu:) //WITH_U_UNICODE:直接用ü(nü) defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); //oHanyuPinyinStringArray如果传入的字符不是汉字不能转换成拼音,那么会直接返回null。 String[]pinyin=PinyinHelper.toHanyuPinyinStringArray('重',defaultFormat); for(Stringstr:pinyin){ System.out.println(str); }
结果:
ZHONG4
CHONG2
其他工具类
获取获得汉语拼音首字母
将字符串中的中文转化为拼音,英文字符不变
/** *获得汉语拼音首字母 * *@paramchines *汉字 *@return */ publicstaticStringgetAlpha(Stringchines){ StringpinyinName=""; char[]nameChar=chines.toCharArray(); HanyuPinyinOutputFormatdefaultFormat=newHanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for(inti=0;i128){ try{ pinyinName+=PinyinHelper.toHanyuPinyinStringArray( nameChar[i],defaultFormat)[0].charAt(0); }catch(BadHanyuPinyinOutputFormatCombinatione){ e.printStackTrace(); } }else{ pinyinName+=nameChar[i]; } } returnpinyinName; } /** *将字符串中的中文转化为拼音,英文字符不变 * *@paraminputString *汉字 *@return */ publicstaticStringgetPingYin(StringinputString){ HanyuPinyinOutputFormatformat=newHanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_V); Stringoutput=""; if(inputString!=null&&inputString.length()>0 &&!"null".equals(inputString)){ char[]input=inputString.trim().toCharArray(); try{ for(inti=0;i 128){ try{ pinyinName+=PinyinHelper.toHanyuPinyinStringArray( nameChar[i],defaultFormat)[0].charAt(0); }catch(BadHanyuPinyinOutputFormatCombinatione){ e.printStackTrace(); } }else{ pinyinName+=nameChar[i]; } } returnpinyinName; }
更多关于Java汉字转拼音pinyin4j用法请查看下面的相碰链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。