拼音转换类

来源:互联网 发布:淘宝客户裂变营销 编辑:程序博客网 时间: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;        }    }}