使用第三方包:pinyin4j-2.5.0.jar
/**
* 汉字转拼音,非汉字保留
* @param hanziString 汉字串
* @param toneType 音调类型
* @return 拼音串
*/
public static String getPinyinAll(String hanziString, HanyuPinyinToneType toneType){
if(hanziString != null && !hanziString.trim().equalsIgnoreCase("")){
char[] srcChar = hanziString.trim().toCharArray();
HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();
hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写
hanYuPinOutputFormat.setToneType(toneType); // 音调
hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); // 编码
StringBuffer output = new StringBuffer();
for(int i=0;i<srcChar.length;i++){
char c = srcChar[i];
//if(String.valueOf(c).matches("[//u4E00-//u9FA5]+")){ //中文字符
if(isChineseChar(c)){ //中文字符
try{
String[] temp = PinyinHelper.toHanyuPinyinStringArray(srcChar[i],hanYuPinOutputFormat);
output.append(temp[0]);
output.append(" ");
}catch(BadHanyuPinyinOutputFormatCombination e){
e.printStackTrace();
}
}else{ //其他字符
output.append(String.valueOf(srcChar[i]));
}
}
return output.toString();
}
return null;
}
/**
* 汉字转拼音并取首字母,非汉字保留
* @param hanziString 汉字串
* @return 拼音首字母串
*/
public static String getPinyinHead(String hanziString){
if(hanziString != null && !hanziString.trim().equalsIgnoreCase("")){
char[] srcChar = hanziString.trim().toCharArray();
HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();
hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写
hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 音调
hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); // 编码
StringBuffer output = new StringBuffer();
for(int i=0;i<srcChar.length;i++){
char c = srcChar[i];
if(isChineseChar(c)){ //中文字符
try{
String[] temp = PinyinHelper.toHanyuPinyinStringArray(srcChar[i],hanYuPinOutputFormat);
output.append(temp[0].charAt(0));
}catch(BadHanyuPinyinOutputFormatCombination e){
e.printStackTrace();
}
}else{ //其他字符
output.append(String.valueOf(srcChar[i]));
}
}
return output.toString();
}
return null;
}
// 判断一个字符是否为中文
public static boolean isChineseChar(char ch){
try {
return String.valueOf(ch).getBytes("GBK").length > 1;
} catch (Exception e) {
}
return false;
}
使用:
static public void main(String[] args){
String str = "我是中国人! I'm Chinese!";
System.out.println(getPinyinAll(str, HanyuPinyinToneType.WITH_TONE_MARK));// 使用音调
System.out.println(getPinyinAll(str, HanyuPinyinToneType.WITH_TONE_NUMBER));// 音调使用数字
System.out.println(getPinyinAll(str, HanyuPinyinToneType.WITHOUT_TONE));// 不用音调
System.out.println(getPinyinHead(str));// 获取拼音首字母
}
输出:
wŏ shì zhōng guó rén ! I'm Chinese!
wo3 shi4 zhong1 guo2 ren2 ! I'm Chinese!
wo shi zhong guo ren ! I'm Chinese!
wszgr! I'm Chinese!