java中英文獲取首字母

package com.ijushang.shop.util;

/**
 * @author shiyz
 * @creation date 2012-10-25 上午11:01:34
 *
 */
public class GetPinyin {
    /**
     * @param args
     */
    public static void main(String[] args) {
        GetPinyin obj1 = new GetPinyin();
        System.out.println(obj1.String2Alpha("shiyuezhong測試:中華人民共和國!","b"));//shiyuezhongCS0ZHRMGHG0
        System.out.println(obj1.String2Alpha("程序猿","s")); //cxy
        System.out.println(obj1.String2AlphaFirst("機","b")); //D
        System.out.println(obj1.String2AlphaFirst("q","b"));//英文按實際大小寫輸出  q 參數不起作用
        System.out.println(obj1.String2AlphaFirst("包拯","s")); //b
        System.out.println(obj1.String2AlphaFirst("Kobe","s"));//英文按實際大小寫輸出  K 參數不起作用
        System.out.println(obj1.gbValue('施'));//51881
      } 
        public GetPinyin() {

        }
         //字母Z使用了兩個標籤,這裏有27個值
         //i, u, v都不做聲母, 跟隨前面的字母
        private char[] chartable =
           {
             '啊', '芭', '擦', '搭', '蛾', '發', '噶', '哈', '哈',
             '擊', '喀', '垃', '媽', '拿', '哦', '啪', '期', '然',
             '撒', '塌', '塌', '塌', '挖', '昔', '壓', '匝', '座'
            };
        private char[] alphatableb =
          {
             'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
             'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
           };
        private char[] alphatables =
              {
                 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
               };
        private int[] table = new int[27];  //初始化
          {
                 for (int i = 0; i < 27; ++i) {
                     table[i] = gbValue(chartable[i]);
                 }
           }
        //主函數,輸入字符,得到他的聲母,
        //英文字母返回對應的大小寫字母
        //其他非簡體漢字返回 '0'  按參數
         public char Char2Alpha(char ch,String type) {
              if (ch >= 'a' && ch <= 'z')
               // return (char) (ch - 'a' + 'A');
                  return ch;
              if (ch >= 'A' && ch <= 'Z')
                  return ch;

                 int gb = gbValue(ch);
                 if (gb < table[0])
                  return '0';

              int i;
                 for (i = 0; i < 26; ++i) {
                  if (match(i, gb))
                         break;
              }

                 if (i >= 26){
                  return '0';}
                 else{
                     if("b".equals(type)){//大寫
                         return alphatableb[i];
                     }else{//小寫
                         return alphatables[i];
                     }
                 }
          }
     //根據一個包含漢字的字符串返回一個漢字拼音首字母的字符串
     public String String2Alpha(String SourceStr,String type) {
         String Result = "";
         int StrLength = SourceStr.length();
         int i;
      try {
          for (i = 0; i < StrLength; i++) {
                 Result += Char2Alpha(SourceStr.charAt(i),type);
             }
         } catch (Exception e) {
          Result = "";
         }
      return Result;
    }
   //根據一個包含漢字的字符串返回第一個漢字拼音首字母的字符串
     public String String2AlphaFirst(String SourceStr,String type) {
           String Result = "";
         try {
           Result += Char2Alpha(SourceStr.charAt(0),type);
         } catch (Exception e) {
           Result = "";
         }
      return Result;
    }
     private boolean match(int i, int gb) {
            if (gb < table[i])
               return false;
             int j = i + 1;

             //字母Z使用了兩個標籤
             while (j < 26 && (table[j] == table[i]))
                 ++j;
             if (j == 26)
                 return gb <= table[j];
            else
                 return gb < table[j];
          }

     //取出漢字的編碼
     private int gbValue(char ch) {
         String str = new String();
         str += ch;
         try {
             byte[] bytes = str.getBytes("GBK");
                 if (bytes.length < 2)
                     return 0;
                 return (bytes[0] << 8 & 0xff00) + (bytes[1] &
                         0xff);
             } catch (Exception e) {
               return 0;
             }
         }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章