在一些场景中,我们会遇到将中文汉字转换成拼音的操作,需要获取全部拼音,首字母等等。我们需要在 pom 文件里面引入下面 jar 包:
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
具体的工具类如下:
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 嗨客网
* @description
*/
public class PinYinUtil {
/**
* 返回中文的拼音
*
* @param str
* @return
*/
public static String str2Spell(String str) {
char[] strChars = str.toCharArray();
String[] tmp = new String[strChars.length];
HanyuPinyinOutputFormat output = new HanyuPinyinOutputFormat();
output.setCaseType(HanyuPinyinCaseType.LOWERCASE);
output.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
output.setVCharType(HanyuPinyinVCharType.WITH_V);
String result = "";
int t0 = strChars.length;
try {
for (int i = 0; i < t0; i++) {
// 判断是否为汉字字符
if (java.lang.Character.toString(strChars[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
tmp = PinyinHelper.toHanyuPinyinStringArray(strChars[i], output);
result += tmp[0];
} else
result += java.lang.Character.toString(strChars[i]);
}
return result;
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return result;
}
/**
* 获取字符串内的所有汉字的汉语拼音并大写每个字的首字母
*
* @param str
* @return
*/
public static String str2FirstUpperSpell(String str) {
if (str == null) {
return null;
}
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不标声调
format.setVCharType(HanyuPinyinVCharType.WITH_V);// u:的声母替换为v
try {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
String[] array = PinyinHelper.toHanyuPinyinStringArray(
str.charAt(i), format);
if (array == null || array.length == 0) {
sb.append(String.valueOf(str.charAt(i)).toUpperCase());
continue;
}
String s = array[0];// 不管多音字,只取第一个
char c = s.charAt(0);// 大写第一个字母
String pinyin = String.valueOf(c).toUpperCase()
.concat(s.substring(1));
sb.append(pinyin);
}
return sb.toString();
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return null;
}
/**
* 返回中文每个个汉字的拼音首字母
*
* @param str
* @return
*/
public static String str2Alpha(String str) {
String result = "";
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;
}
}
for (int i = 0; i < convert.length(); i++) {// convert目前为小写首字母,下面是将小写首字母转化为大写
if (convert.charAt(i) >= 'a' && convert.charAt(i) <= 'z') {
result += convert.substring(i, i + 1).toUpperCase();
} else {
result += convert.charAt(i);
}
}
return result;
}
/**
* 返回中文全拼首字母
*
* @param str
* @return
*/
public static String str2FirstAlpha(String str) {
String alpha = str2Alpha(str);
return alpha.substring(0, 1);
}
}