使用内容解析程序查询从联系人中获取数字 - 特殊情况

时间:2011-12-02 19:36:18

标签: java android sql regex sqlite

我正在尝试查询存储在android的联系人数据库中的电话号码。

我提供了一个输入sting用于比较,我需要查询只选择那些匹配此输入字符串的行。

在查询联系人db时,我希望查询忽略数字中包含的所有特殊字符,并将输入字符串与字段中包含的数字进行比较。

例如;如果存储的数字是(944)6-129-337,查询应该将输入字符串与9446129337进行比较,而不是与(944)6-129-337进行比较。

以下是我查询数据库并获取数字的代码。

            contactCursor = getContentResolver().query(uri, projection,
            ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "' AND " +
            ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ? ",new String[] { input_string }, null);

我遇到的问题是,它只是在每个电话号码字段中进行简单搜索而不在内部删除(使用正则表达式或修改查询?)特殊字符。

我不知道如何清理查询中的特殊字符。任何有助于我解决此查询问题的帮助都将受到赞赏

谢谢, ANEES

2 个答案:

答案 0 :(得分:1)

作为一个可能对你有用的黑客......你可以在每个数字之间使用通配符传递你的号码,然后在你的Java代码中重新过滤结果......例如... LIKE '%9%4%4%6%1%2%9%3%3%7%' ...可能会返回很少的结果,包括(944) 6-129-337和(可能)+1 (944) 612-9337;但是您可以收集这些结果,在您自己的代码中去除非数字值,并进行比较。但是,如果您的搜索字符串非常短,那么“误报”的点击次数就会大得多。不幸的是,我没有使用Android内容系统对此进行测试,因此可能会溢出允许的通配符或类似数量: - (

答案 1 :(得分:0)

使用此

 Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/%915894%");

仅返回您的需求。