拼音匹配算法

为了感谢上一篇贴子的加精(基于j2me的图片特效(缩放,裁剪,调整大小,镜像,对比度亮度调整,黑白,线条,粉笔画) ),决定再接再厉,奉上另一实用代码,呵呵,

这是在项目中,有一个功能是关于《拼音匹配的算法》。至于算法的思想,就不想过多的解释了, 大家去看吧

在附件中,可下载一个测试的demo,

关于测试的demo是用j2se实现的,不过没关系,大家可以放心的在 j2me下使用,因为主要代码,是不需要做任何改动就可以移植到j2me下(Test.java 除外)

有如下4个文件

Test.java   测试主程序入口

Friend.java  好友javabean

Utils.java  查找方法

Pinyin  对应汉字获取拼音的类

大家可能有疑问,一个简单的功能,为什么写这么多,因为我是从整个项目中,提取的一部分,所以没有整理,只是做了点 小小的修改,把对大家没有必要的代码,都给删掉了(例如Friend.java的持久化存储和别的过滤),只留下的基本的查找匹配的实现

先 贴上部分代码,完整版请下载随贴附件

 public class Utils{   
     /*
     *返回true表示匹配,false表示不匹配!
     *例如测试用例为:"测试",查找key可以为汉字,也可以为拼音
     * 测试   key = "测"    返回  true
     * 测试   key = "c"     返回  true
     * 测试   key = "cs"    返回  true
     * 测试   key = "ces"   返回  true
     * 测试   key = "desh"  返回  false
     * 测试   key = "ceshi" 返回  true
     */
     public static boolean filter(Friend friend,String key)
         {
              boolean res = false;
              boolean pinYinFlag = false; //false 输入的是非英文字符。
              int c = key.charAt(0);
              if(c<255)
                  pinYinFlag = true;
              else
                  pinYinFlag = false;   
              if(pinYinFlag == true) //输入的为拼音
              {
                  String tempStr = friend.getPinYin(); 
                  key = key.toLowerCase();
                  int startPos = 0;
                  int flag = 0;
                  if(tempStr.charAt(0) == key.charAt(0))
                  {
                      startPos = 1;
                      flag++;
                      for(int i=1;i<key.length();i++)
                      {
                          for(int ii=startPos;ii<tempStr.length();ii++)
                          {  
                             if(tempStr.charAt(ii)==key.charAt(i)&&ii>=startPos)
                             {
                                  if(tempStr.charAt(ii-1) ==' '||tempStr.charAt(ii-1) == key.charAt(i-1))
                                  {
                                 startPos = ii;
                                 flag++;
                                 break;
                                  } 
                             }
                          }
                     }
                       if(flag == key.length())
                           res = true;
                       else
                           res = false;
                  }
              }
              else
              {
                  if(friend.getName().length()>=key.length())
                  {
                     if(friend.getName().substring(0,key.length()).compareTo(key)==0)
                        res = true;
                   }
              }
              return res;
         }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值