package com.cabletech.common.util; import org.apache.log4j.Logger; 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; /** * 将汉字词语转换为拼音以及获得汉字拼音的首字母 * * @author zh * */ public class Hanzi2PinyinUtil { private static Logger log = Logger.getLogger(Hanzi2PinyinUtil.class); /** * 通过汉字获得拼音字母 * * @param src * 汉字串 * @return */ public static String getPingYin(String src) { char[] t1 = null; t1 = src.toCharArray(); String[] t2 = new String[t1.length]; HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat(); t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE); t3.setVCharType(HanyuPinyinVCharType.WITH_V); String t4 = ""; int t0 = t1.length; try { for (int i = 0; i < t0; i++) { // 判断是否为汉字字符 if (java.lang.Character.toString(t1[i]).matches( "[\\u4E00-\\u9FA5]+")) { t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3); t4 += t2[0]; } else t4 += java.lang.Character.toString(t1[i]); } return t4; } catch (BadHanyuPinyinOutputFormatCombination e1) { log.error(e1); } return t4; } /** * 返回中文的首字母 * * @param str * 汉字 * @return */ public static String getPinYinHeadChar(String str) { 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; } } return convert.toUpperCase(); } /** * 将字符串转移为ASCII码 * * @param cnStr cnStr * @return */ public static String getCnASCII(String cnStr) { StringBuffer strBuf = new StringBuffer(); byte[] bGBK = cnStr.getBytes(); for (int i = 0; i < bGBK.length; i++) { strBuf.append(Integer.toHexString(bGBK[i] & 0xff)); } return strBuf.toString(); } /** * 生成业务代码的前缀,根据不同名称及当前日期生成业务代码前缀。 * * @param cnStr cnStr * @return */ public static String generateCode4Prefix(String cnStr) { StringBuffer number = new StringBuffer(); number.append(Hanzi2PinyinUtil.getPinYinHeadChar(cnStr)); number.append(DateUtil.getNowDateString("yyyyMM")); return number.toString(); } }