拼音转换类

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;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值