提取汉字首字母拼音

public   class  EncodeUtil {

  
/**   国标码和区位码转换常量       */
  
public   static   final   int  GB_SP_DIFF  =   160 ;

  
/**   存放国标一级汉字不同读音的起始区位码        */
  
public   static   final   int [] secPosvalueList  =  {  1601 1637 1833 2078 2274 2302 2433 2594 2787 3106 3212 3472 ,
      
3635 3722 3730 3858 4027 4086 4390 4558 4684 4925 5249 5600  };

  
/**   存放国标一级汉字不同读音的起始区位码对应读音        */
  
public   static   final   char [] firstLetter  =  {  ' a ' ' b ' ' c ' ' d ' ' e ' ' f ' ' g ' ' h ' ' j ' ' k ' ' l ' ' m ' ' n ' ' o ' ' p ' ,
      
' q ' ' r ' ' s ' ' t ' ' w ' ' x ' ' y ' ' z '  };

  
/**
   * <p>获取一个字符串的拼音码   。</p>
   * 
@param  oriStr
   * 
@return  一个字符串的拼音码
   
*/
  
public   static  String getFirstLetter(String oriStr) {
    String str 
=  oriStr.toLowerCase();
    StringBuffer buffer 
=   new  StringBuffer();
    
char  ch;
    
char [] temp;
    
for  ( int  i  =   0 ; i  <  str.length(); i ++ ) {  // 依次处理str中每个字符   
      ch  =  str.charAt(i);
      temp 
=   new   char [] { ch };
      
byte [] uniCode  =   new  String(temp).getBytes();
      
if  (uniCode[ 0 <   128   &&  uniCode[ 0 >   0 ) {  //    非汉字   
        buffer.append(temp);
      } 
else  {
        buffer.append(convert(uniCode));
      }
    }
    
return  buffer.toString();
  }

  
/**
   *  获取一个汉字的拼音首字母。   
   *   GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码   
   *   例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43   
   *   0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’   
   *  
@param  bytes
   *  
@return  char
   
*/
  
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;
  }
}
以上代码为提取给定汉字的首字母,比如EncodeUtil .getFirstLetter("你好"), 这样返回的结果是 'nh';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值