Java汉字转拼⾳pinyin4j⽤法详解
⼀、⼯具介绍
pinyin4j 是⼀个⽀持将简体和繁体中⽂转换到成拼⾳的Java开源类库;
1. 功能
⽀持同⼀汉字有多个发⾳
还⽀持拼⾳的格式化输出,⽐如第⼏声之类的,
同时⽀持简体中⽂、繁体中⽂转换为拼⾳…使⽤起来也⾮常简单。下⾯是其官⽅⽹址,其中提供了下载:
pinyin4j的官⽅下载地址
2. ⽬录结构及说明
doc : pinyin4j的api⽂档
lib : pinyin4j的jar包
src: pinyin4j的源代码
< : pinyin4j的版本更新⽇志
< : LICENSE说明
< : pinyin4j的概要介绍
3. 原理
pinyin4j使⽤了⼀个.txt的⽂本⽂件(uicode_to_)⽤来存储汉字unicode编码与拼⾳的对应关系,通过读取该配置⽂件达到转换的⽬的。
该属性⽂件存储信息的基本格式如下:89E3 (jie3,jie4,xie4) //(对应汉字”解”)89E3 是汉字对应的unicode编码的16进制数,(jie3,jie4,xie4)是该汉字对应的三种读⾳(在汉语⾥有多⾳字)
说明pinyin4j⽀持多⾳字的处理pinyin4j的处理过程是这样的:
根据String的toCharArray⽅法得到每个字符(得到”解”字的unicode编码,实际上是35299,由于java中char和String都是unicode编码的可以直接转为int型的编码数据35299),然后利⽤HexStri
ng(c1).toUpperCase()将其转换成16进制数[也就是89E3],通过读取配置⽂件得到“解”字的拼⾳(jie3,jie4,xie4),那么这⾥有三个拼⾳,pinyin4j的默认取值为第⼀个,也就是jie3[表⽰读jie,声调是三声]
⼆、pinyin4J 使⽤
pinyin4j 提供的⼯具类为PinyinHelper,⾥边提供了静态⽅法
- toHanyuPinyinString()(过时)
- toHanyuPinyinStringArray()
pinyin4j 中有四个辅助类分别是:
druid连接池配置详解- HanyuPinyinCaseType
- HanyuPinyinToneType
- HanyuPinyinVCharType
- HanyuPinyinOutputFormat
具体功能和⽤法见⼀下代码:
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 控制⼤⼩写
// 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 = HanyuPinyinStringArray('重', defaultFormat);
for(String str: pinyin){
System.out.println(str);
}
结果:
ZHONG4
CHONG2
其他⼯具类
获取获得汉语拼⾳⾸字母
将字符串中的中⽂转化为拼⾳,英⽂字符不变
/**
* 获得汉语拼⾳⾸字母
*
* @param chines
*      汉字
* @return
*/
public static String getAlpha(String chines) {
String pinyinName = "";
char[] nameChar = CharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < nameChar.length; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += HanyuPinyinStringArray(
nameChar[i], defaultFormat)[0].charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
/**
* 将字符串中的中⽂转化为拼⾳,英⽂字符不变
*
* @param inputString
*      汉字
* @return
*/
public static String getPingYin(String inputString) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
String output = "";
if (inputString != null && inputString.length() > 0
&& !"null".equals(inputString)) {
char[] input = im().toCharArray();
try {
for (int i = 0; i < input.length; i++) {
if (java.String(input[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
String[] temp = HanyuPinyinStringArray(
input[i], format);
output += temp[0];
} else
output += java.String(input[i]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
return "*";
}
return output;
}
/**
* 汉字转换为汉语拼⾳⾸字母,英⽂字符不变
*
* @param chines
*      汉字
* @return 拼⾳
*/
public static String converterToFirstSpell(String chines) {
String pinyinName = "";
char[] nameChar = CharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < nameChar.length; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += HanyuPinyinStringArray(
nameChar[i], defaultFormat)[0].charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
更多关于Java汉字转拼⾳pinyin4j⽤法请查看下⾯的相碰链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。