zoukankan      html  css  js  c++  java
  • java 简单的模糊查找

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

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

    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. 以上为简单的实现  不能对汉字单词进行识别  很遗憾
  • 相关阅读:
    动态调用web服务
    组件设计实战--组件之间的关系 (Event、依赖倒置、Bridge)
    .NET平台下可复用的Tcp通信层实现
    推荐所有的.NET开发人员阅读《J2EE Development without EJB》
    关于跨程序集的反射(续)
    IoC与DI (转载)
    某公司的一道机考题的解答
    使用 EmptyClass 避免条件判断
    EsbAOP应用--权限管理
    企业(分布式)计算十大谬误
  • 原文地址:https://www.cnblogs.com/autum/p/java.html
Copyright © 2011-2022 走看看