2015-10-20 49 views
0

[]這是我的計劃的簡要說明:
1 - 我做了藥名的列表視圖(+8000名)
2,每一個名字都有資產文件夾的唯一的HTML文檔
3-我做的是,在列表視圖搜索
[
]問題搜索欄:我想imoprove搜索功能,以便它可以在每個HTML文件中搜索。
,這是我的代碼:有在txt文件搜索和Java的Android的HTML文件中搜索之間的差異

// Filter Class to search in titles and inside html files 

public void filter(String charText) throws FileNotFoundException { 

    charText = charText.toLowerCase(Locale.getDefault()); 
    druglist.clear(); 
    if (charText.length() == 0) { 
     druglist.addAll(arraylist); 

    } else { 
     int i=-1; 
     for (drugPopulation wp : arraylist) { 
      i++;    
      if (wp.getitem().toLowerCase(Locale.getDefault()).contains(charText)||Searchfor(charText, arraylisthtml.get(i).getitem())) { 
       druglist.add(wp); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 

*,這是我searchfor功能:

private boolean Searchfor(String search, String s) throws FileNotFoundException { 
String path = "file:///android_asset/"+s; 
    Boolean yes=false; 

    final Scanner scanner = new Scanner(path); 
    while (scanner.hasNextLine()) { 
     final String lineFromFile = scanner.nextLine(); 
     if(lineFromFile.contains(search)) { 
      // a match! 
      yes=true; 
      break; 
     } 
    } 

    return yes; 
} 

[*]結果和問題:

1 - 當我運行應用程序,並嘗試這個搜索工具它不會返回真正的結果(我認爲searchfor函數總是返回false),在html文件中搜索和在txt文件中搜索有什麼區別,以及可能導致這些錯誤結果的原因是什麼?
2 - 搜索速度非常慢,有沒有辦法改進它?
在此先感謝。

回答

0

我可以看到,在這種情況下,您只檢查文件是否包含某個詞String search,因此您實際上不必逐行讀取文件,只需將其讀取爲單個字符串,然後調用.contains(search)就可以了,這應該使查找更快

另外:

Searchfor(charText, arraylisthtml.get(i).getitem()) 

相反的Searchfor(charText, arraylisthtml.get(i).getitem())你可以打電話Searchfor(charText, wp.getitem()),擺脫了我的。

但最重要的是,您應該「預處理」您的數據,我的意思是,如果您有一種方法來分組和排序文件,您將要搜索槽,然後搜索它們,然後使用優化的算法,即字母順序 - 二分搜索。 如果你想提高搜索速度,你應該真的嘗試這樣做。祝你好運!希望我是有幫助的。

+0

@Ravzan非常感謝您的回答,我如何將html文件作爲單個字符串讀取,因爲我認爲它無法導入java.io.IOException; java.nio.file.Files; java.nio.file.Paths; –