Java拼音工具类

在一些场景中,我们会遇到将中文汉字转换成拼音的操作,需要获取全部拼音,首字母等等。我们需要在 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); } }