最近做一個基於語音的文件管理器,說幾個字就可以找到相應的文件或者歌曲,視頻等
當語音輸入的,在文件中找不到完全匹配時,進行模糊查找,找到相似度最高的並且打開它。
- File File1=new File("/sdcard/music"); 主函數的一部分
- serchFile(File1); 查找
- if(max==0) Toast.makeText(FileManager.this, "沒有找到", Toast.LENGTH_LONG).show(); 報錯
- else openFile(maxfile); 打開找到的匹配度最高的那一個文件
- String Keywords="彩虹.mp3"; 這是需要搜索的歌曲 屬於外部輸入
- File maxfile = new File("/"); 用於保存匹配度最高的文件
- int max = 0; 保存匹配值 用於比較
- private void serchFile(File file){
- if(file.canRead()){//只能遍歷可讀的文件夾,否則會報錯
- File[] mFileArray = file.listFiles(); file文件路徑下的所有文件都放在這個文件數組中
- for(File currentArray:mFileArray){
- if(currentArray.exists()&¤tArray.isDirectory()){//如果是文件夾則回調該方法
- serchFile(currentArray); 如果是文件夾 回調serchFile函數
- }
- else { 如果不是 就進行比較 匹配值為當前最高時修改max maxfile變量
- for(int j=0;j<mFileArray.length;j++){
- if(this.contrast(Keywords,mFileArray[j].getName())>max){
- max = this.contrast(Keywords,mFileArray[j].getName());
- maxfile = mFileArray[j];
- }
- }
- }
- }
- }
- }
- private int contrast(String str1,String str2){ 具體對比實現
- int a=0;
- int k=0;
- char[] chars1=str1.toCharArray(); 字符串轉換為字符數組 java使用UTF-8編碼格式存儲 使用的時候如果帶有漢字則都為16位 非常方便
- char[] chars2=str2.toCharArray();
- for(int i=0;i<chars1.length;i++){ 一個一個的對比
- for(int j=0;j<chars2.length-k;j++){
- if(chars1[i]==chars2[j]){
- a++;
- for(;(j+1)<chars2.length-k;j++){ 為防止漢字的重復出現 進行刪減字符數組
- chars2[j]=chars2[j+1];
- }
- k++;
- }
- }
- }
- return a; 最后返回匹配值
- }
- 以上為簡單的實現 不能對漢字單詞進行識別 很遺憾