获取汉字拼音首字母

来源:互联网 发布:电脑总是弹出淘宝广告 编辑:程序博客网 时间:2024/04/28 20:59

最近在做一个拨打网络电话的应用,光数据库设计这一块就头疼了很久,需要创建独立的数据库,而不是直接使用手机联系人数据库。既然独立创建,那就需要模拟一份手机联系人的数据库信息。

应用设计到电话接打,信息收发,联系人列表,通话记录,信息统计这样的一些业务。所以觉得这个数据设计应该不是很简单。不过有多不简单就不说了。现在需要解决一个现实问题:联系人列表有索引值,联系人按拼音首字母归类显示,并能通过首字母很快查找到,简单的说就是跟“手机联系人”的应用是一样的效果。由于是自建数据库,所以这个索引需要自己做,因为在添加联系人的时候必须有索引值。

所谓拼音首字母索引,就是用户名是名字的拼音的对应关系,比如:张三------->zs。或者:张三------>zhangsan

其实只要把汉字转换成拼音了,问题就简单了。就这问题,我在网上找了一个大侠的贴,觉得很不错,就拿来了。原帖地址:http://www.oschina.net/code/snippet_203635_11850。

主要难题已被这位大神解决了,我就在这里班门弄斧一下。

就我的问题而言,把新增的联系人制作一个首字母索引,就只要用到文中的三个方法:

   public static String getSpells(String characters){    StringBuffer buffer = new StringBuffer();    for(int i=0;i<characters.length();i++){        char ch = characters.charAt(i);    if((ch>>7)==0){    //判断是否为汉字,如果左移7为为0就不是汉字,否则是汉字
return characters;//这句是我自己加的,如果不是汉字,那就返回原字符串,应该没问题吧!    }else{char spell = getFirstLetter(ch);buffer.append(String.valueOf(spell));    }    }return buffer.toString();    }    // 获取一个汉字的首字母     public static Character getFirstLetter(char ch) {                  byte[] uniCode = null;         try {             uniCode = String.valueOf(ch).getBytes("GBK");         } catch (UnsupportedEncodingException e) {             e.printStackTrace();             return null;         }         if (uniCode[0] < 128 && uniCode[0] > 0) { // 非汉字             return null;         } else {             return convert(uniCode);         }     }     /**     * 获取一个汉字的拼音首字母。 GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码     * 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43     * 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’     */     static char convert(byte[] bytes) {         char result = '-';         int secPosValue = 0;         int i;         for (i = 0; i < bytes.length; i++) {             bytes[i] -= GB_SP_DIFF;         }         secPosValue = bytes[0] * 100 + bytes[1];         for (i = 0; i < 23; i++) {             if (secPosValue >= secPosValueList[i] && secPosValue < secPosValueList[i + 1]) {                 result = firstLetter[i];                 break;             }         }         return result;     } 
我们新增联系人时,只需要 sortKey = getSpells(“联系人名字”),把sortKey自己处理一下就可以插入自己的联系人数据库中了,取出来是绝对没错的。

原创粉丝点击