JAVAは中国語の名前の頭文字を取得して、例えば:“阿魯卓玛”、取得した頭文字は“alzm”です

3388 ワード

1、FirstLetterUtilクラスのgetFirstLetter()メソッドを呼び出し、名前の頭文字を取得します.例えば、「アルチャマ」が取得したアルファベットは「alzm」です.
String firstLetter = FirstLetterUtil.getFirstLetter(「アルチャマ」);
2、コード、以下:
public class FirstLetterUtil {
    private static int BEGIN = 45217;
    private static int END = 63486;
    //       ,     GB2312          ,    “ ”      a      。
    // i, u, v     ,            
    private static char[] chartable = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
        ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
        ' ', ' ', ' ', ' ', ' ',};
    //                 
    // GB2312          
    private static int[] table = new int[27];
    //         
    private static char[] initialtable = {'a', 'b', 'c', 'd', 'e', 'f', 'g',
        'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
        't', 't', 'w', 'x', 'y', 'z',};
    //    
    static {
        for (int i = 0; i < 26; i++) {
            table[i] = gbValue(chartable[i]);//   GB2312          ,   。
        }
        table[26] = END;//      
    }
    /**
     *                                     ,    :       、  、  
     */
    public static String getFirstLetter(String sourceStr) {
        String result = "";
        String str = sourceStr.toLowerCase();
        int StrLength = str.length();
        int i;
        try {
            for (i = 0; i < StrLength; i++) {
                result += Char2Initial(str.charAt(i));
            }
        } catch (Exception e) {
            result = "";
        }
        return result;
    }
    /**
     *     ,      ,             ,          '0'
     */
    private static char Char2Initial(char ch) {
        //         :         ,       
        if (ch >= 'a' && ch <= 'z') {
            return ch;
        }
        if (ch >= 'A' && ch <= 'Z') {
            return ch;
        }
        //          :      ,            ,
        //    ,     。
        //   ,          。
        int gb = gbValue(ch);//        
        if ((gb < BEGIN) || (gb > END))//        ,    
        {
            return ch;
        }
        int i;
        for (i = 0; i < 26; i++) {//         ,    break,      “[,)”
            if ((gb >= table[i]) && (gb < table[i + 1])) {
                break;
            }
        }
        if (gb == END) {//  GB2312     
            i = 25;
        }
        return initialtable[i]; //       ,     
    }
    /**
     *         cn   
     */
    private static int gbValue(char ch) {//      (GB2312)        。
        String str = new String();
        str += ch;
        try {
            byte[] bytes = str.getBytes("GB2312");
            if (bytes.length < 2) {
                return 0;
            }
            return (bytes[0] << 8 & 0xff00) + (bytes[1] & 0xff);
        } catch (Exception e) {
            return 0;
        }
    }
}