汉字转拼音我们需要使用到pinyin4j这个工具jar包,它可以处理中文转换成拼音(汉语拼音,罗马拼音等)
PinyinHelper 提供了汉字转拼音的主要方法
HanyuPinyinOutputFormat 定义如何输出拼音,
HanyuPinyinCaseType 提供了拼音输出的样式
HanyuPinyinToneType 输出音标的设置
HanyuPinyinVCharType 特殊音标ü的设置(了解下)
>
>com.belerweb >
>pinyin4j >
>2.5.0 >
>
工具类中的两个方法可以合在一起
/**
* @description:汉字转拼音工具类
*/
public class HanZiToPinYinUtil {
public static void main(String[] args) {
String allPinYin = getAllPinYin("我是中国人00");
String firstPinYin = getFirstPinYin("我是中国人00");
String allPinYin2 = getAllPinYin("王宇");
System.out.println(allPinYin);
System.out.println(allPinYin2);
System.out.println(firstPinYin);
}
/**
* 获取汉字字符串的全拼音
* @param hanZi '我是中国人00'
* @return
*/
public static String getAllPinYin(String hanZi){
//这个类定义了如何输出汉语拼音。
HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);//小写形式输出,LOWERCASE:输出小写,UPPERCASE:输出大写
pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);//输出音标设置,WITH_TONE_MARK:直接用音标符(必须设置WITH_U_UNICODE,否则会抛出异常),WITH_TONE_NUMBER:1-4数字表示音标,WITHOUT_TONE:没有音标
pinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);//特殊音标ü的设置,(WITH_V:用v表示ü,WITH_U_AND_COLON:用"u:"表示ü,WITH_U_UNICODE:直接用ü)
char[] hanziChars = hanZi.trim().toCharArray();//汉字数组,去掉前后多余的空格
StringBuilder stringBuilder = new StringBuilder();
try {
for (int i = 0; i < hanziChars.length; i++) {
String hanziString = Character.toString(hanziChars[i]);//得到单个汉字,例如‘中’
if(hanziString.matches("[\\u4e00-\\u9fa5]")){//判断是否是汉字
String[] pinYinAll = PinyinHelper.toHanyuPinyinStringArray(hanziChars[i],pinyinOutputFormat);//得到此汉字的所有读音,例如中是一个多音字,其结果就是['zhōng','zhòng']
String oneHanZiPinYin = pinYinAll[0];//直接取一个拼音为汉字的拼音,例如zhōng
stringBuilder.append(oneHanZiPinYin);
}else {//不是汉字原样输出
stringBuilder.append(hanziString);
}
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
String allPinYin = stringBuilder.toString();//返回中文字符串的全拼,例如:wŏshìzhōngzhòngguórén00
return allPinYin;
}
/**
* 获取汉字字符串的首字母拼音
* @param hanZi '我是中国人00'
* @return
*/
public static String getFirstPinYin(String hanZi){
//这个类定义了如何输出汉语拼音。
HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);//小写形式输出,LOWERCASE:输出小写,UPPERCASE:输出大写
pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);//输出音标设置,WITH_TONE_MARK:直接用音标符(必须设置WITH_U_UNICODE,否则会抛出异常),WITH_TONE_NUMBER:1-4数字表示音标,WITHOUT_TONE:没有音标
pinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);//特殊音标ü的设置,(WITH_V:用v表示ü,WITH_U_AND_COLON:用"u:"表示ü,WITH_U_UNICODE:直接用ü)
char[] hanziChars = hanZi.trim().toCharArray();//去掉前后多余的空格,转为汉字数组
StringBuilder stringBuilder = new StringBuilder();
try {
for (int i = 0; i < hanziChars.length; i++) {
String hanziString = Character.toString(hanziChars[i]);//得到单个汉字,例如‘中’
if(hanziString.matches("[\\u4e00-\\u9fa5]")){//判断是否是汉字
String[] pinYinAll = PinyinHelper.toHanyuPinyinStringArray(hanziChars[i],pinyinOutputFormat);//得到此汉字的所有读音,例如中是一个多音字,其结果就是['zhōng','zhòng']
String firstString = Character.toString(pinYinAll[0].charAt(0));//去第一个拼音的第一个字符为汉字首字母
stringBuilder.append(firstString);
}else {//不是汉字原样输出
stringBuilder.append(hanziString);
}
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
String allPinYin = stringBuilder.toString();//返回中文字符串的首字母拼音
return allPinYin;
}
}
输出结果
wŏshìzhōngguórén00
wángyŭ
wszgr00