拼音转换类
来源:互联网 发布:淘宝客户裂变营销 编辑:程序博客网 时间:2024/05/01 07:47
package com.yunmall.framework.core.util;import java.io.UnsupportedEncodingException;import com.yunmall.framework.core.log.LogTrace;/** * 拼音转换类 * * @version 1.0 * @createDate 2012-8-8 * @modifyDate 2012-8-14 */public class CnToSpellUtil { private static final LogTrace log = new LogTrace("CnToSpellUtil"); private CnToSpellUtil() { } /** * 将字符串转换为拼音 * * @param cnStr * 要转换的内容 * @return 拼音 */ public static String toSpell(String cnStr) { if (StringUtil.isEmpty(cnStr)) { return cnStr; } char[] chars = cnStr.toCharArray(); StringBuffer retuBuf = new StringBuffer(); for (int i = 0, len = chars.length; i < len; i++) { String ascii = getCnAscii(chars[i]); if (ascii.length() == 0) { retuBuf.append(chars[i]); } else { String spell = getSpellByAscii(ascii); if (spell == null) { char firstChar = chars[i]; if ((firstChar >= 48 && firstChar <= 57) || (firstChar >= 65 && firstChar <= 90) || (firstChar >= 97 && firstChar <= 122)) { retuBuf.append(firstChar); } } else { retuBuf.append(spell); } } } return retuBuf.toString(); } /** * 将每个分词的首字符转换为拼音 * * @param cnStr * 要转换的内容 * @return 各分词首字母拼音 */ public static String getFirstSpell(String cnStr) { if (StringUtil.isEmpty(cnStr)) { return cnStr; } char[] chars = cnStr.toCharArray(); StringBuffer retuBuf = new StringBuffer(); for (int i = 0, len = chars.length; i < len; i++) { String ascii = getCnAscii(chars[i]); char firstChar; if (ascii.length() == 1) { firstChar = chars[i]; } else { String spell = getSpellByAscii(ascii); if (spell == null || "".equals(cnStr.trim())) { firstChar = chars[i]; } else { try { firstChar = spell.charAt(0); } catch (Exception e) { firstChar = " ".toCharArray()[0]; log.error(e.getMessage()); } } } if ((firstChar >= 48 && firstChar <= 57) || (firstChar >= 65 && firstChar <= 90) || (firstChar >= 97 && firstChar <= 122)) { retuBuf.append(firstChar); } } return retuBuf.toString(); } /** * 将字符串的首字母转换为拼音 * * @param cnStr * 要转换的内容 * @return 首字母拼音 */ public static String getFirstWordSpell(String cnStr) { if (StringUtil.isEmpty(cnStr)) { return cnStr; } char[] chars = cnStr.toCharArray(); for (int i = 0, len = chars.length; i < len; i++) { String ascii = getCnAscii(chars[i]); if (ascii.length() == 1) { return ascii; } else { String spell = getSpellByAscii(ascii); if (spell == null || "".equals(cnStr.trim())) { continue; } else { return String.valueOf(spell.charAt(0)); } } } return ""; } private static String getCnAscii(char cn) { byte[] bytes; try { bytes = (String.valueOf(cn)).getBytes("GBK"); if (bytes == null || bytes.length > 2 || bytes.length <= 0) { return ""; } if (bytes.length == 1) { return new String(bytes); } if (bytes.length == 2) { int hightByte = 256 + bytes[0]; int lowByte = 256 + bytes[1]; String ascii = hightByte + "-" + lowByte; return ascii; } } catch (UnsupportedEncodingException e) { return ""; } return ""; } private static String getSpellByAscii(String ascii) { if (ascii.indexOf("-") > -1) { return (String) CnAsciiLib.spellMap.get(ascii); } else { return ascii; } }}