Android-通过模糊/近似/相似匹配查找联系人
有多种方法可以通过显示名称查找联系人。例如,这个答案 但我需要找到模糊匹配的联系人。例如,如果找不到“Kim”,我需要返回名为“Keem”的联系人Android-通过模糊/近似/相似匹配查找联系人,android,android-contacts,android-contentresolver,Android,Android Contacts,Android Contentresolver,有多种方法可以通过显示名称查找联系人。例如,这个答案 但我需要找到模糊匹配的联系人。例如,如果找不到“Kim”,我需要返回名为“Keem”的联系人 我如何做到这一点?没有构建API可以对显示名称进行模糊搜索,但您可以自己完成,应该不会那么难: 从数据库中读取所有联系人的姓名 使用类似于Jaro Winkler的相似性字符串比较算法与请求的名称进行比较 返回最佳匹配 对于第一步,以下是代码: Map<String, Long> contacts = new HashMap<Str
我如何做到这一点?没有构建API可以对显示名称进行模糊搜索,但您可以自己完成,应该不会那么难:
Map<String, Long> contacts = new HashMap<String, Long>();
String[] projection = {Contacts._ID, Contacts.DISPLAY_NAME};
// use null if you want to include hidden contacts
String selection = Contacts.IN_VISIBLE_GROUP + "=1";
Cursor cur = cr.query(Contacts.CONTENT_URI, projection, selection, null, null);
while (cur != null && cur.moveToNext()) {
long id = cur.getLong(0);
String name = cur.getString(1);
contacts.put(name, id);
}
if (cur != null) {
cur.close();
}
Map contacts=newhashmap();
字符串[]投影={Contacts.\u ID,Contacts.DISPLAY\u NAME};
//如果要包括隐藏联系人,请使用null
字符串选择=Contacts.IN_VISIBLE_GROUP+“=1”;
Cursor cur=cr.query(Contacts.CONTENT\u URI,投影,选择,null,null);
while(cur!=null&&cur.moveToNext(){
long id=cur.getLong(0);
字符串名称=cur.getString(1);
联系人。put(姓名、id);
}
如果(cur!=null){
cur.close();
}
对于步骤2,您可以使用Jaro Winkler或其他字符串距离算法,这里有一个库可以帮助您: