2017-08-30 73 views
0

我正在製作一個使用webview顯示存儲的HTML數據的android應用程序。現在,我試圖結束的問題是如何在搜索某些用戶輸入字符串時忽略HTML/CSS等標記/元素。我的數據庫已經是110MB,我認爲使用另一個只有文本和沒有HTML的字段只會增加數據庫的大小。正則表達式也將很昂貴,可能不可靠。僅忽略SQLite中的HTML標記和搜索文本

有沒有其他方法可以做到這一點?

回答

0

也許你可以在你的程序中對查詢的記錄進行額外的過濾。您可以使用HTML解析器(如Jsoup)去除HTML標籤,然後您可以在剩餘的文本中搜索。 Jsoup的簡單Java示例:

List<String> records = ... // your queried records - potential results 
List<String> results = new ArrayList<String>(); 
for(String r : records) { 
    Document d = Jsoup.parse(r); // parse HTML 
    String text = d.text(); // extract text 
    if (text.contains(searchTerm)) { // or do your search here 
     results.add(r); 
    } 
} 
return results; // you got real results here 

它可能不是最好的解決方案,但是是一種選擇。我認爲它也很昂貴,但比正則表達式更可靠(您試圖避免)。

更新:正則表達式的方式

我認爲剝離HTML標籤的唯一途徑,而取是使用regex in SQLite。例如,下面的模式應該用來匹配字符串外的HTML標籤:

(^|>)[^<]*(searchterm)[^<]*(<|$) 

在下面的示例文本將只匹配1,第3和第4 searchterm,而不是第二個:

searchterm <tag searchterm> searchterm </tag> searchterm 

你可以在行動here看到它。

SQLite中,你可以使用正則表達式是這樣的:

WHERE column-name REGEXP 'regular-expression' 
+0

謝謝你的答覆。我從數據庫獲取記錄時沒有辦法進行過濾?例如列名像用戶字符串?從數據庫中提取所有數據以及將減慢搜索過程的處理。 –

+0

這將是正則表達式的方式,我想不出任何其他解決方案。我在我的答案中添加了一個例子,我希望它有幫助。 – juzraai

+0

謝謝。我會看看這裏有人能提出更好的方法。然後,我會對您的解決方案進行加權,使其無需使用純文本並直接查詢。 謝謝Juzraai –