package com.yihu.platform.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; /******************************************************************************* * pinyin4j is a plug-in, you can kind of Chinese characters into phonetic.Multi-tone character,Tone Detailed view http://pinyin4j.sourceforge.net/ * * @author Administrator * @ClassName: Pinyin4jUtil * @Description: TODO * @author wang_china@foxmail.com * @date Jan 13, 2012 9:28:28 AM */ public class Pinyin4jUtil { /*************************************************************************** * 获取中文汉字拼音 默认输出 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:34:11 AM * @param chinese * 中文汉字 * @throws BadHanyuPinyinOutputFormatCombination */ public static String getPinyin(String chinese) { char[] chars = chinese.toCharArray(); if (chinese != null && !chinese.trim().equalsIgnoreCase("")) { char[] srcChar = chinese.toCharArray(); String[][] temp = new String[chinese.length()][]; for (int i = 0; i < srcChar.length; i++) { char c = srcChar[i]; // 是中文或者a-z或者A-Z转换拼音 if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) { try { temp[i] = PinyinHelper.toHanyuPinyinStringArray(chars[i], getDefaultOutputFormat()); } catch (Exception e) { e.printStackTrace(); } } else { //否则则保持原样 temp[i] = new String[] { String.valueOf(srcChar[i]) }; } } String[] pingyinArray = Exchange(temp); if(pingyinArray != null && pingyinArray.length > 0){ return pingyinArray[0]; } } return null; } /*************************************************************************** * Default Format 默认输出格式 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:35:51 AM * @return */ public static HanyuPinyinOutputFormat getDefaultOutputFormat() { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 没有音调数字 format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u显示 return format; } /*************************************************************************** * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:39:54 AM * @param strJaggedArray * @return */ public static String[] Exchange(String[][] strJaggedArray) { String[][] temp = DoExchange(strJaggedArray); return temp[0]; } /*************************************************************************** * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:39:47 AM * @param strJaggedArray * @return */ private static String[][] DoExchange(String[][] strJaggedArray) { int len = strJaggedArray.length; if (len >= 2) { int len1 = strJaggedArray[0].length; int len2 = strJaggedArray[1].length; int newlen = len1 * len2; String[] temp = new String[newlen]; int Index = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { temp[Index] = capitalize(strJaggedArray[0][i]) + capitalize(strJaggedArray[1][j]); //temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j]; Index++; } } String[][] newArray = new String[len - 1][]; for (int i = 2; i < len; i++) { newArray[i - 1] = strJaggedArray[i]; } newArray[0] = temp; return DoExchange(newArray); } else { return strJaggedArray; } } /*************************************************************************** * 首字母大写 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:36:18 AM * @param s * @return */ public static String capitalize(String s) { char ch[]; ch = s.toCharArray(); if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } String newString = new String(ch); return newString; } /** * 获取汉字首字母 * @param str * @return */ public static String getPinYinHeadChar(String str) { if (StringUtil.isEmpty(str)) { return ""; } str = str.replaceAll("厦门","xm").replaceAll("重庆", "cq").replaceAll("长沙", "cs").replaceAll("长春", "cc"); String convert = ""; for (int j = 0; j < str.length(); j++) { char word = str.charAt(j); // 提取汉字的首字母 String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); if (pinyinArray != null) { convert += pinyinArray[0].charAt(0); } else { convert += word; } } convert = string2AllTrim(convert); return convert.toLowerCase(); } /** * 去掉字符串包含的所有空格 * * @param value * @return */ public static String string2AllTrim(String value) { if (StringUtil.isEmpty(value)) { return ""; } return value.trim().replace(" ", ""); } /*************************************************************************** * Test * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:49:27 AM * @param args * @throws BadHanyuPinyinOutputFormatCombination */ public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination { String str = "张三覃矶澊左1@"; System.out.println("小写输出:" + getPinyin(str)); } }