项目须要使用这个,就在网上搜了下如何使用,顺便把一些方法整合到一个类中,分享下 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(); } }