您的位置:首页 > 编程语言 > Java开发

java获取汉字拼音首字母

2016-09-20 10:16 447 查看
  在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫“李晓明”的人,可以输入‘lxm'。写了一个工具类如下:

[java] view
plain copy

 print?

import java.io.UnsupportedEncodingException;  

  

/** 

 * 取得给定汉字串的首字母串,即声母串 

 * Title: ChineseCharToEn 

 * @date 2004-02-19 注:只支持GB2312字符集中的汉字 
 */  

public final class ChineseCharToEn {  

    private final static int[] li_SecPosValue = { 1601, 1637, 1833, 2078, 2274,  

            2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,  

            4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };  

    private final static String[] lc_FirstLetter = { "a", "b", "c", "d", "e",  

            "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",  

            "t", "w", "x", "y", "z" };  

  

    /** 

     * 取得给定汉字串的首字母串,即声母串 

     * @param str 给定汉字串 

     * @return 声母串 

     */  

    public String getAllFirstLetter(String str) {  

        if (str == null || str.trim().length() == 0) {  

            return "";  

        }  

  

        String _str = "";  

        for (int i = 0; i < str.length(); i++) {  

            _str = _str + this.getFirstLetter(str.substring(i, i + 1));  

        }  

  

        return _str;  

    }  

  

    /** 

     * 取得给定汉字的首字母,即声母 

     * @param chinese 给定的汉字 

     * @return 给定汉字的声母 

     */  

    public String getFirstLetter(String chinese) {  

        if (chinese == null || chinese.trim().length() == 0) {  

            return "";  

        }  

        chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");  

  

        if (chinese.length() > 1) // 判断是不是汉字  

        {  

            int li_SectorCode = (int) chinese.charAt(0); // 汉字区码  

            int li_PositionCode = (int) chinese.charAt(1); // 汉字位码  

            li_SectorCode = li_SectorCode - 160;  

            li_PositionCode = li_PositionCode - 160;  

            int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码  

            if (li_SecPosCode > 1600 && li_SecPosCode < 5590) {  

                for (int i = 0; i < 23; i++) {  

                    if (li_SecPosCode >= li_SecPosValue[i]  

                            && li_SecPosCode < li_SecPosValue[i + 1]) {  

                        chinese = lc_FirstLetter[i];  

                        break;  

                    }  

                }  

            } else // 非汉字字符,如图形符号或ASCII码  

            {  

                chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");  

                chinese = chinese.substring(0, 1);  

            }  

        }  

  

        return chinese;  

    }  

  

    /** 

     * 字符串编码转换 

     * @param str 要转换编码的字符串 

     * @param charsetName 原来的编码 

     * @param toCharsetName 转换后的编码 

     * @return 经过编码转换后的字符串 

     */  

    private String conversionStr(String str, String charsetName,String toCharsetName) {  

        try {  

            str = new String(str.getBytes(charsetName), toCharsetName);  

        } catch (UnsupportedEncodingException ex) {  

            System.out.println("字符串编码转换异常:" + ex.getMessage());  

        }  

        return str;  

    }  

  

    public static void main(String[] args) {  

        ChineseCharToEn cte = new ChineseCharToEn();  

        System.out.println("获取拼音首字母:"+ cte.getAllFirstLetter("北京联席办"));  

    }  

  

}  

控制台输出  获取首字母:bjlxb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: