在项目中有很多汉字与拼音互相转换的方法,本文博主将这些方法总结出来,汇总成工具类,供大家参考使用。
public class PhoneticTranscriptionUtil { /** * 获取当前所有字符转为全拼小写(数字 标点 字母转换为本身) * * @param chineseLanguage 要转成拼音的中文 */ @GetMapping("/toHanyuPinyin") public Result<String> toHanyuPinyin(String chineseLanguage) { Result<String> result = new Result<String>(); char[] cl_chars = chineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部小写 defaultFormat.setCaseType(LOWERCASE); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V); try { for (int i = 0; i < cl_chars.length; i++) { // 如果字符是中文,则将中文转为汉语拼音 if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")) { hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0]; } else { // 如果字符不是中文,则不转换 hanyupinyin += cl_chars[i]; } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } result.setData(hanyupinyin); return result; } /** * 取当前字符串所有的首字母 且输出为大写 (数字 标点 字母转换成本身) * * @param chineseLanguage * @return */ @GetMapping("getFirstLettersUp") public Result<String> getFirstLettersUp(String chineseLanguage) { Result<String> result = new Result<String>(); result.setData(getFirstLetters(chineseLanguage, UPPERCASE)); return result; } /** * 取当前字符串所有的字符首字母 且输出为小写 (数字 符号 字母转换为本身) * * @param chineseLanguage * @return */ @GetMapping("getFirstLettersLo") public Result<String> getFirstLettersLo(String chineseLanguage) { Result<String> result = new Result<String>(); result.setData(getFirstLetters(chineseLanguage, LOWERCASE)); return result; } /** * 取当前字符串所有的字符首字母 且输出为小写 (数字 字母转换为本身 符号去除) * * @param chineseLanguage * @return */ @GetMapping("getPinyinString") public Result<String> getPinyinString(String chineseLanguage) { Result<String> result = new Result<String>(); char[] cl_chars = chineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部大写 defaultFormat.setCaseType(LOWERCASE); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { for (int i = 0; i < cl_chars.length; i++) { String str = String.valueOf(cl_chars[i]); // 如果字符是中文,则将中文转为汉语拼音,并取第一个字母 if (str.matches("[\u4e00-\u9fa5]+")) { hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0]; } // 如果字符是数字,取数字 else if (str.matches("[0-9]+")) { hanyupinyin += cl_chars[i]; } // 如果字符是字母,取字母 else if (str.matches("[a-zA-Z]+")) { hanyupinyin += cl_chars[i]; } // 否则不转换 else { } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } result.setData(hanyupinyin); return result; } /** * 取字符串第一个汉字的第一个字符为大写(数字 字母 标点转换为本身) * * @return String * @throws */ @GetMapping("getFirstLetter") public Result<String> getFirstLetter(String chineseLanguage) { Result<String> result = new Result<String>(); char[] cl_chars = chineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部大写 defaultFormat.setCaseType(UPPERCASE); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { String str = String.valueOf(cl_chars[0]); // 如果字符是中文,则将中文转为汉语拼音,并取第一个字母 if (str.matches("[\u4e00-\u9fa5]+")) { hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(cl_chars[0], defaultFormat)[0].substring(0, 1); } // 如果字符是数字,取数字 else if (str.matches("[0-9]+")) { hanyupinyin += cl_chars[0]; } // 如果字符是字母,取字母 else if (str.matches("[a-zA-Z]+")) { hanyupinyin += cl_chars[0]; } else {// 否则不转换 hanyupinyin += cl_chars[0]; } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } result.setData(hanyupinyin); return result; } /** * 取字符串第一个汉字的第一个字符为小写(数字 字母 标点转换为本身) * * @return String * @throws */ @GetMapping("getFirstLower") public Result<String> getFirstLower(String chineseLanguage) { Result<String> result = new Result<String>(); char[] cl_chars = chineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部小写 defaultFormat.setCaseType(LOWERCASE); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { String str = String.valueOf(cl_chars[0]); // 如果字符是中文,则将中文转为汉语拼音,并取第一个字母 if (str.matches("[\u4e00-\u9fa5]+")) { hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(cl_chars[0], defaultFormat)[0].substring(0, 1); } // 如果字符是数字,取数字 else if (str.matches("[0-9]+")) { hanyupinyin += cl_chars[0]; } // 如果字符是字母,取字母 else if (str.matches("[a-zA-Z]+")) { hanyupinyin += cl_chars[0]; } else {// 否则不转换 hanyupinyin += cl_chars[0]; } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } result.setData(hanyupinyin); return result; } /** * getFirstLettersLo,getFirstLettersUp的实现方法 * * @param chineseLanguage * @param caseType * @return */ public String getFirstLetters(String chineseLanguage, HanyuPinyinCaseType caseType) { char[] cl_chars = chineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出拼音全部大写 defaultFormat.setCaseType(caseType); // 不带声调 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { for (int i = 0; i < cl_chars.length; i++) { String str = String.valueOf(cl_chars[i]); // 如果字符是中文,则将中文转为汉语拼音,并取第一个字母 if (str.matches("[\u4e00-\u9fa5]+")) { hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1); } // 如果字符是数字,取数字 else if (str.matches("[0-9]+")) { hanyupinyin += cl_chars[i]; } // 如果字符是字母,取字母 else if (str.matches("[a-zA-Z]+")) { hanyupinyin += cl_chars[i]; } // 否则不转换 else { // 如果是标点符号的话,带着 hanyupinyin += cl_chars[i]; } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return hanyupinyin; } }