Pinyin4j是一个流行的Java库(主页:http://pinyin4j.sourceforge.net/),支持中文字符和拼音之间的转换。拼音输出格式可以定制。Pinyin4j有如下的特点:
1.支持简体中文和繁体中文字符;
2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字;
3.支持多音字,即可以获取一个中文字符的多种发音;
4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。
下面是用Pinyin4j实现的汉字转换为拼音的一个简单例子:
package zhchljr.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 zhchljr
* @version 1.0
*/
public class Chinese2Pinyin {
public static void main(String[] args) {
String name = "春运";
System.out.println(getPinyin(name));
System.out.println(getPinYinHeadChar(name));
}
/**
* 将汉字转换为拼音
* @param str 汉字
* @return 汉字的全拼音
*/
public static String getPinyin(String str) {
char[] strCharArray = null;
strCharArray = str.toCharArray();
String[] pinYinArray = new String[strCharArray.length];
// 设置拼音的输出格式
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
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 返回汉字的拼音首字母
*/
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;
}
}