在我的 Android 應用程式的一部分中,您可以按姓名搜索人員。但我需要即使名字或姓氏寫錯(例如沒有重音),也會顯示結果:
例子:
資料庫中:Pérez Juan、Cooper Sheldon、Pérez Adrian
搜索: perez
演出:佩雷斯·胡安、佩雷斯·阿德里安(來自資料庫)
我正在使用 LIKE 執行查詢,它可以覆寫不敏感的大小寫,但它不適用于重音,因為我必須寫完全相同的字母(有或沒有重音),這是我的作業代碼:
所以我得到了 searchPerson 中使用的變數
String name = searchEditText.getText().toString();
if (!name.equals("")){
name = "%" name "%";
}
人道
@Query("SELECT *, lastName || ' ' || name AS FullName\n"
"FROM Person\n"
"WHERE FullName LIKE :fn\n"
"ORDER BY FullName")
LiveData<List<Person>> searchPerson(String fn);
在 StackOverflow 上找到可能的解決方案
為了解決口音的問題,我找到了我試圖實施但沒有成功的答案
所以我得到了 searchPerson 中使用的變數
String name = searchEditText.getText().toString();
name = addTildeOptions(name);
addTildeOptions 函式
private String addTildeOptions(String searchText) {
return searchText.toLowerCase()
.replaceAll("\\[aáà?a?]\\.*", "[aáà?a?]")
.replaceAll("\\[eéè?ê]\\.*", "[eéè?ê]")
.replaceAll("\\[iíì?]\\.*", "[iíì?]")
.replaceAll("\\[oóò???]\\.*", "[oóò???]")
.replaceAll("\\[uúùü?]\\.*", "[uúùü?]")
.replace("*", "[*]")
.replace("?", "[?]");
}
人道
@Query("SELECT *, lastName || ' ' || name AS FullName\n"
"FROM Person\n"
"WHERE lower(FullName) GLOB :fn\n"
"ORDER BY FullName")
LiveData<List<Person>> searchPerson(String fn);
但是,這不會回傳任何結果,即使我鍵入一個字母它也不會顯示任何內容。
我嘗試在獲取 EditText 的文本時在開頭和結尾添加星號,嘗試在我的 PersonDao 查詢中輸入 addTildeOptions 函式,如答案所示,但未能這樣做,嘗試了其他一些不相關的事情,但從未得到結果.
我的代碼有什么問題?
uj5u.com熱心網友回復:
您的較新查詢失敗的原因是您將lower
-cased 字串傳遞給 WHERE 子句,并且沒有行匹配這些小寫字串。例如,您的表包含“Pérez Juan”,而不是“pérez juan”
該addTildeOptions
功能在正確的軌道上,但您需要更改它以用“?字符,以便查詢可以使用 LIKE 或 GLOB 查找行:
String globPersonName(String fn) {
return fn.replaceAll("[aáà?a?]", "?")
.replaceAll("[eéè?ê]", "?")
.replaceAll("[iíì?]", "?")
.replaceAll("[oóò???]", "?")
.replaceAll("[uúùü?]", "?");
}
然后只需洗掉lower
呼叫并將 GLOB 保留在您的查詢中:
@Query("SELECT *, lastName || ' ' || name AS FullName\n"
"FROM Person\n"
"WHERE FullName GLOB :fn\n"
"ORDER BY FullName")
LiveData<List<Person>> searchPerson(String fn);
因此,搜索名稱的所有變體如下所示:personDao.searchPerson(globPersonName(fn));
例如,globPersonName("Perez Juan")
將回傳P?r?z J??n
并且您的查詢應該找到“Pérez Juan”記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448508.html