本文总共4644个字,阅读需16分钟,全文加载时间:2.184s,本站综合其他专栏收录该内容! 字体大小:

文章导读:在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代……各位看官请向下阅读:

在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代码,copy了两个简单的工具方法,供参考

第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想

package com.lovo.utils;import org.springframework.stereotype.Component;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/** * pinyin4j汉字转拼音工具类 * @author zhiheng * */@Componentpublic class ChangeToPinYin { //pinyin4j格式类 private HanyuPinyinOutputFormat format = null; //拼音字符串数组 private String[]pinyin; //通过构造方法进行初始化 public ChangeToPinYin(){ format = new HanyuPinyinOutputFormat(); /* * 设置需要转换的拼音格式 * 以天为例 * HanyuPinyinToneType.WITHOUT_TONE 转换为tian * HanyuPinyinToneType.WITH_TONE_MARK 转换为tian1 * HanyuPinyinVCharType.WITH_U_UNICODE 转换为tiān * */ format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); pinyin = null; } /** * 对单个字进行转换 * @param pinYinStr 需转换的汉字字符串 * @return 拼音字符串数组 */ public String getCharPinYin(char pinYinStr){ try { //执行转换 pinyin = PinyinHelper.toHanyuPinyinStringArray(pinYinStr, format); } catch (BadHanyuPinyinOutputFormatCombination e) { // TODO Auto-generated catch block e.printStackTrace(); } //pinyin4j规则,当转换的符串不是汉字,就返回null if(pinyin == null){ return null; } //多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音 return pinyin[0]; } /** * 对单个字进行转换 * @param pinYinStr * @return */ public String getStringPinYin(String pinYinStr){ StringBuffer sb = new StringBuffer(); String tempStr = null; //循环字符串 for(int i = 0; i<pinYinStr.length(); i++) { tempStr = this.getCharPinYin(pinYinStr.charAt(i)); if(tempStr == null) { //非汉字直接拼接 sb.append(pinYinStr.charAt(i)); } else { sb.append(tempStr); } } return sb.toString(); }}

测试

import javax.annotation.Resource;import org.junit.Ignore;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.lovo.utils.ChangeToPinYin;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:applicationContext.xml"})public class ToPinYinTest { @Resource private ChangeToPinYin changeToPinYin; @Test public void changePinYinTest(){ String str = "你在做什么?what are you nong sa lie?"; System.out.println(changeToPinYin.getStringPinYin(str)); } @Ignore public void changechar(){ char c = '你'; System.out.println(changeToPinYin.getCharPinYin(c)); } }

测试结果

第二个方法使用JPinyin,说是在pinyin4j的jar上进行了优化,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能,下面一段代码简单列举了下汉字转换拼音及简体转换繁体

package com.lovo.utils;import opensource.jpinyin.ChineseHelper;import opensource.jpinyin.PinyinFormat;import opensource.jpinyin.PinyinHelper;import org.springframework.stereotype.Component;@Componentpublic class ChangeToPinYinJP { /** * 转换为有声调的拼音字符串 * @param pinYinStr 汉字 * @return 有声调的拼音字符串 */ public String changeToMarkPinYin(String pinYinStr){ String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_MARK); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 转换为数字声调字符串 * @param pinYinStr 需转换的汉字 * @return 转换完成的拼音字符串 */ public String changeToNumberPinYin(String pinYinStr){ String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_NUMBER); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 转换为不带音调的拼音字符串 * @param pinYinStr 需转换的汉字 * @return 拼音字符串 */ public String changeToTonePinYin(String pinYinStr){ String tempStr = null; try { tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITHOUT_TONE); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 转换为每个汉字对应拼音首字母字符串 * @param pinYinStr 需转换的汉字 * @return 拼音字符串 */ public String changeToGetShortPinYin(String pinYinStr){ String tempStr = null; try { tempStr = PinyinHelper.getShortPinyin(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 检查汉字是否为多音字 * @param pinYinStr 需检查的汉字 * @return true 多音字,false 不是多音字 */ public boolean checkPinYin(char pinYinStr){ boolean check = false; try { check = PinyinHelper.hasMultiPinyin(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return check; } /** * 简体转换为繁体 * @param pinYinStr * @return */ public String changeToTraditional(String pinYinStr){ String tempStr = null; try { tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr); } catch (Exception e) { e.printStackTrace(); } return tempStr; } /** * 繁体转换为简体 * @param pinYinSt * @return */ public String changeToSimplified(String pinYinSt){ String tempStr = null; try { tempStr = ChineseHelper.convertToSimplifiedChinese(pinYinSt); } catch (Exception e) { e.printStackTrace(); } return tempStr; } // public static void main(String[] args) {// String str = "重慶 most input";// ChangeToPinYinJP jp = new ChangeToPinYinJP();// System.out.println(jp.changeToSimplified(str));// System.out.println(jp.checkPinYin('重'));// }}

拼音转换jar还有很多其他的功能,对项目实际是很有帮助的,这里只是简单的介绍了下最基本的功能,有兴趣的可以自行去了解。

以上内容由优质教程资源合作伙伴 “鲸鱼办公” 整理编辑,如果对您有帮助欢迎转发分享!

你可能对这些文章感兴趣:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注