項目須要使用這個,就在網上搜了下如何使用,順便把一些方法整合到一個類中,分享下 java
package com.sk.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class Pinyin { public static void main(String[] args) { System.out.println(new Pinyin().trans2Full("哈哈哈,這是一個好的good idea 吧?1000塊錢值了吧?")); } private HanyuPinyinOutputFormat format = null; private String[] pinyin; public Pinyin() { format = new HanyuPinyinOutputFormat(); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); pinyin = null; } /** * 轉換單個字符 * @param c * @return */ public String trans2Char(char c){ try{ pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format); }catch (BadHanyuPinyinOutputFormatCombination e){ e.printStackTrace(); } // 若是c不是漢字,toHanyuPinyinStringArray會返回null // 只取一個發音,若是是多音字,僅取第一個發音 return (pinyin == null) ? null : pinyin[0]; } /** * 轉換成全拼+首字母 * @param str * @return */ public String trans2Full(String str){ StringBuffer sb = new StringBuffer(trans2QuanPin(str)); return sb.append(trans2HeadChar(str)).toString(); } /** * 轉換一段字符串爲全拼 * @param str * @return */ public String trans2QuanPin(String str){ StringBuffer sb = new StringBuffer(); String tempPinyin = null; for (int i = 0; i < str.length(); i++){ tempPinyin = trans2Char(str.charAt(i)); if (tempPinyin == null){ // 若是str.charAt(i)非漢字,則保持原樣 sb.append(str.charAt(i)); }else{ sb.append(tempPinyin); } } return sb.toString(); } /** * 轉換成 漢字首字母 * @param str * @return */ public String trans2HeadChar(String str){ StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length(); i++) { String tempPinyin[] = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i)); if (tempPinyin == null){ // 若是str.charAt(i)非漢字,則保持原樣 sb.append(str.charAt(i)); }else{// 提取漢字的首字母 sb.append(tempPinyin[0].charAt(0)); } } return sb.toString(); } }