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;i128){
try{
pinyinName+=PinyinHelper.toHanyuPinyinStringArray(
nameChar[i],defaultFormat)[0].charAt(0);
}catch(BadHanyuPinyinOutputFormatCombinatione){
e.printStackTrace();
}
}else{
pinyinName+=nameChar[i];
}
}
returnpinyinName;
}
更多关于Java汉字转拼音pinyin4j用法请查看下面的相碰链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。