今天看了一篇博客(http://guyexin-126-com.iteye.com/blog/842954)里说关于pinyin4j的即将汉字转成汉语拼音,感觉在有的个别项目中确实可能用到,而这又属于公用的,所以决定在自己的博客里多分一个Util类,即总结收集可以作为工具类,如果大家也有这些比较好的工具类可以交流交流。
今天就列pinyin4j吧,刚才也说了pinyin4j是的作用就是将汉字转成汉语拼音,pinyin4j就是一个支持中文转中文拼音的Java开源类库。
其主页:http://pinyin4j.sourceforge.net/
package com.iflytek.pinyin4j;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
* @author xudongwang 2012-1-11
*
* Email:xdwangiflytek@gmail.com
*/
public class Pinyin4jUtil {
public static void main(String[] args) {
String str = "王旭东";
System.out.println(getPinYin(str));
System.out.println(getPinYinHeadChar(str));
System.out.println(getStrASCII(str));
}
/**
* 将汉字转换为全拼
*
* @param str
* 汉字
* @return String 返回汉字的全拼音
*/
public static String getPinYin(String str) {
char[] strCharArray = null;
strCharArray = str.toCharArray();
String[] pinYinArray = new String[strCharArray.length];
// 设置汉字拼音输出的格式
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
//设置拼音的大小写,UPPERCASE表示大写,LOWERCASE表示小写
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
String result = "";
int flag = strCharArray.length;
try {
for (int i = 0; i < flag; i++) {
// 判断能否为汉字字符
if (Character.toString(strCharArray[i]).matches("[\\u4E00-\\u9FA5]+")) {
pinYinArray = PinyinHelper.toHanyuPinyinStringArray(strCharArray[i], format);// 将汉字的几种全拼都存到pinYinArray数组中
result += pinYinArray[0];// 取出该汉字全拼的第一种读音并连接到字符串result后
} else {
// 如果不是汉字字符,间接取出字符并连接到字符串result后
result += Character.toString(strCharArray[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return result;
}
/**
* 提取每个汉字的首字母
*
* @param str
* 汉字
* @return String 返回汉字的拼音首字母
*/
public static String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
// 提取汉字的首字母
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
/**
* 将字符串转换成ASCII码
*
* @param str
* 需要转换的字符串
* @return String 字符串转换后的ASCII码
*/
public static String getStrASCII(String str) {
StringBuffer strBuf = new StringBuffer();
// 将字符串转换成字节序列
byte[] bGBK = str.getBytes();
for (int i = 0; i < bGBK.length; i++) {
// 将每个字符转换成ASCII码
strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
}
return strBuf.toString();
}
}
说明:
HanyuPinyinOutputFormat格式:
其他具体的方法参数等可以参考官网给出的文档;