JAVA实现汉字转换为拼音 pinyin4j/JPinyin
生活随笔
收集整理的這篇文章主要介紹了
JAVA实现汉字转换为拼音 pinyin4j/JPinyin
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自??JAVA實現漢字轉換為拼音 pinyin4j/JPinyin
在項目中經常會遇到需求用戶輸入漢字后轉換為拼音的場景,比如說通訊錄,就會要求按名字首字符發音排序,如果自己寫實現這方面的功能是個很好大的工程,還好網上有公開的第三方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**/ @Component public 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 blocke.printStackTrace();}//pinyin4j規則,當轉換的符串不是漢字,就返回nullif(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 {@Resourceprivate ChangeToPinYin changeToPinYin;@Testpublic void changePinYinTest(){String str = "你在做什么?what are you nong sa lie?";System.out.println(changeToPinYin.getStringPinYin(str));}@Ignorepublic 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;@Component public 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還有很多其他的功能,對項目實際是很有幫助的,這里只是簡單的介紹了下最基本的功能,有興趣的可以自行去了解。總結
以上是生活随笔為你收集整理的JAVA实现汉字转换为拼音 pinyin4j/JPinyin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程雷个人资料 关于程雷的简介
- 下一篇: 刺猬怎么画 刺猬简笔画教程