本文共 5472 字,大约阅读时间需要 18 分钟。
Pinyin4j 是一个流行的 Java 库,支持汉字和大多数流行的拼音系统之间的转换,包括汉语拼音、罗马拼音等。其独特之处在于,用户可以自定义拼音输出格式,极大地提高了灵活性和实用性。
Pinyin4j 提供了多个实用功能类,用于将中文字符转换为各种罗马化表示。主要包括:
引入依赖:
com.belerweb pinyin4j 2.5.1
测试方法:
private static void testPinyin4j(String chinese) { char[] arr = "汉语".toCharArray(); HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat(); pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { System.out.println("toHanYuPinyinString - " + PinyinHelper.toHanYuPinyinString(chinese, pinyinOutputFormat, "", true)); System.out.println("toHanyuPinyinStringArray - " + PinyinHelper.toHanyuPinyinStringArray(arr[0], pinyinOutputFormat)[0].charAt(0)); System.out.println("toHanyuPinyinStringArray - " + PinyinHelper.toHanyuPinyinStringArray(arr[0])[0].charAt(0)); System.out.println("toTongyongPinyinStringArray - " + PinyinHelper.toTongyongPinyinStringArray(arr[0])[0].charAt(0)); System.out.println("toYalePinyinStringArray - " + PinyinHelper.toYalePinyinStringArray(arr[0])[0].charAt(0)); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); }} 在项目中,用户常常需要将汉字转换为拼音。Pinyin4j 可以很好地满足这一需求。以下是一个封装了常用功能的工具类:
public class Pinyin4jUtil { /** * 将中文转换为汉语全拼,支持多音字,英文字符和特殊字符丢弃。 * @param str 字符串,null返回空字符串 * @return 汉语全拼 */ public static String getFullSpell(String str) { if (str == null) { return ""; } HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat(); pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { return PinyinHelper.toHanYuPinyinString(str, pinyinOutputFormat, " ", false); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return ""; } /** * 将中文转换为汉语全拼,支持多音字,英文字符和特殊字符保留。 * @param str 字符串,null返回空字符串 * @return 汉语全拼 */ public static String getFullSpellAndStr(String str) { if (str == null) { return ""; } HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat(); pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); try { return PinyinHelper.toHanYuPinyinString(str, pinyinOutputFormat, " ", true); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return ""; } /** * 获取中文字符串中的首字母拼音。 * @param str 字符串,null返回空字符串 * @return 首字母拼音 */ public static String getFirstSpell(String str) { StringBuilder firstPinyin = new StringBuilder(); if (str == null) { return firstPinyin.toString(); } String chinese = getChinese(str); char[] arr = chinese.toCharArray(); for (int i = 0; i < arr.length; i++) { try { String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], new HanyuPinyinOutputFormat()); if (temp != null) { firstPinyin.append(temp[0].charAt(0)); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } return firstPinyin.toString(); } /** * 提取中文字符串,去除非中文字符。 * @param str 字符串,null返回空字符串 */ public static String getChinese(String str) { if (str == null) { return ""; } String regex = "[^\u4e00-\u9fa5]"; // 匹配非中文字符 return str.replaceAll(regex, ""); } public static void main(String[] args) { System.out.println(getFullSpell("你说 重庆话")); System.out.println(getFullSpell("AbCd你说 重庆话")); System.out.println(getFullSpell("你说 重庆话(){}【】.@张三")); // NI SHUO CHONG QING HUA ZHANGSAN System.out.println(getFullSpell("AbCd你说 重庆话()zhangsan")); System.out.println("==============="); System.out.println(getFullSpellAndStr("你说 重庆话")); System.out.println(getFullSpellAndStr("AbCd你说 重庆话")); System.out.println(getFullSpellAndStr("你说 重庆话(){}【】.@张三")); // NI SHUO CHONG QING HUA (){}【】.@ZHANGSAN System.out.println(getFullSpellAndStr("AbCd你说 重庆话()zhangsan")); System.out.println("==============="); System.out.println(getFirstSpell("你说 重庆话")); System.out.println(getFirstSpell("你说 重庆话张三")); System.out.println(getFirstSpell("你说 重庆话(){}【】.@张三")); System.out.println("==============="); System.out.println(getChinese("")); System.out.println(getChinese("AbCd你说 重庆话(){}【】.@张三zhangsan")); }} 通过上述工具类,开发人员可以轻松实现中文到拼音的转换功能。工具类中的方法不仅支持多音字转换,还能根据需求保留或丢弃非中文字符,适用于多种应用场景。
Pinyin4j 库凭借其强大的功能和灵活的配置选项,成为Java 开发者处理汉字与拼音转换的首选工具。通过工具类的封装,开发人员可以快速实现复杂的拼音转换需求,极大地提升了开发效率。
转载地址:http://fhtfk.baihongyu.com/