代码改变世界

java 简单的模糊查找

2012-04-05 20:41  至上  阅读(5680)  评论(0编辑  收藏  举报

最近做一个基于语音的文件管理器,说几个字就可以找到相应的文件或者歌曲,视频等

当语音输入的,在文件中找不到完全匹配时,进行模糊查找,找到相似度最高的并且打开它。

  1.      File File1=new File("/sdcard/music");    主函数的一部分
  2.      serchFile(File1);                                 查找
  3.      if(max==0) Toast.makeText(FileManager.this, "没有找到", Toast.LENGTH_LONG).show();   报错
  4.      else openFile(maxfile);                        打开找到的匹配度最高的那一个文件
  5.     String Keywords="彩虹.mp3";     这是需要搜索的歌曲  属于外部输入
  6.     File maxfile = new File("/");         用于保存匹配度最高的文件
  7.     int max = 0;                             保存匹配值 用于比较
  8.     private void serchFile(File file){
  9.             if(file.canRead()){//只能遍历可读的文件夹,否则会报错
  10.                 File[] mFileArray = file.listFiles();      file文件路径下的所有文件都放在这个文件数组中
  11.                 for(File currentArray:mFileArray){
  12.                     if(currentArray.exists()&&currentArray.isDirectory()){//如果是文件夹则回调该方法
  13.                         serchFile(currentArray);          如果是文件夹  回调serchFile函数             
  14.                     }
  15.                     else {                                       如果不是  就进行比较  匹配值为当前最高时修改max  maxfile变量
  16.                         for(int j=0;j<mFileArray.length;j++){
  17.                             if(this.contrast(Keywords,mFileArray[j].getName())>max){
  18.                                 max = this.contrast(Keywords,mFileArray[j].getName());
  19.                                 maxfile = mFileArray[j];
  20.                             }
  21.                         }
  22.                     }
  23.                 }   
  24.              }
  25.     }
  26.     private int contrast(String str1,String str2){    具体对比实现
  27.         int a=0;
  28.         int k=0;
  29.         char[] chars1=str1.toCharArray();     字符串转换为字符数组  java使用UTF-8编码格式存储  使用的时候如果带有汉字则都为16位  非常方便
  30.         char[] chars2=str2.toCharArray();
  31.         for(int i=0;i<chars1.length;i++){       一个一个的对比
  32.             for(int j=0;j<chars2.length-k;j++){
  33.                 if(chars1[i]==chars2[j]){
  34.                     a++;
  35.                     for(;(j+1)<chars2.length-k;j++){    为防止汉字的重复出现  进行删减字符数组
  36.                         chars2[j]=chars2[j+1];
  37.                     }
  38.                     k++;
  39.                 }
  40.             }
  41.         }
  42.         return a;    最后返回匹配值
  43.     }
  44. 以上为简单的实现  不能对汉字单词进行识别  很遗憾