Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用内容解析程序查询从联系人获取号码-特殊情况_Java_Android_Sql_Regex_Sqlite - Fatal编程技术网

Java 使用内容解析程序查询从联系人获取号码-特殊情况

Java 使用内容解析程序查询从联系人获取号码-特殊情况,java,android,sql,regex,sqlite,Java,Android,Sql,Regex,Sqlite,我正在尝试查询储存在android联系人数据库中的电话号码 我提供了一个用于比较的输入字符串,我需要查询只选择那些与这个输入字符串匹配的行 在查询联系人数据库时,我希望查询忽略数字中包含的所有特殊字符,并将输入字符串与字段中包含的数字进行比较 eg;如果存储的数字是(944)6-129-337,则查询应将输入字符串与9446129337进行比较,而不是与(944)6-129-337进行比较 下面是我用来查询数据库并获取数字的代码 contactCursor = getCo

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

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

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

eg;如果存储的数字是(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);
我这里的问题是,它只是在每个电话号码字段中进行简单搜索,而不在内部删除(使用regexp或修改查询?)特殊字符

我不知道如何清理查询中的特殊字符。在此方面的任何帮助都将帮助我解决此问题,我们将不胜感激

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

作为一种可能适用于您的黑客……您可以在每个数字之间使用通配符传递数字,然后在Java代码中重新过滤结果……例如,
…像“%9%4%4%6%1%2%9%3%3%7%”……
可能返回很少的结果,包括
(944)6-129-337
和(可能)
+1(944)612-9337
;但是您可以收集这些结果,去掉您自己代码中的非数字值,然后进行比较。但是,如果您有很短的搜索字符串,您的“假阳性”数点击率会更高。不幸的是,我还没有在Android内容系统上测试过这一点,所以你可能会溢出允许的通配符数,或者类似的:-(

使用这个

 Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/%915894%");
仅返回您的需要。

使用此选项

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

只返回您的需要。

我执行的几个测试都很有效。。感谢brpoock的帮助。我真的很期待android用户对此的评论。只是不要意外地将
'%1%'
注入一个有5000条记录的电话簿:-)(尤其是一个有5000个
+1
前缀的美国电话簿)那么我想,我不应该使用这个,因为我预计会遇到超过1000个条目的电话簿。有其他方法吗?在添加通配符之前,请确保您的用户输入足够长,可以组成一个有效的电话号码。我相信(?)没有一个地区的电话号码少于6位,这至少可以大大降低选择失控的风险。我能想到的唯一反例是,如果用户有短信短代码或某些类型的紧急情况(911、999)或服务(411611)电话簿中的号码,但希望您对查找这些号码不感兴趣?在我的情况下,这不是问题。我执行的几项测试都有效。感谢Brpoock的帮助。我真的很期待android用户对此发表的意见。只是不要意外地将
'%1%'
注入一个有5000条记录的电话簿:-)(特别是一个美国电话簿,有5000个
+1
前缀)那么我想,我不应该使用这个,因为我预计会遇到一个有1000多个条目的电话簿。有其他方法吗?在添加通配符之前,只需确保您的用户输入足够长,可以组成一个有效的电话号码。我相信(?)没有一个地区的电话号码少于6位,这至少可以大大降低选择失控的风险。我能想到的唯一反例是,如果用户有短信短代码或某些类型的紧急情况(911、999)或服务(411611)电话簿上的号码,但希望您对查找这些号码不感兴趣?在我的情况下,这不会是一个问题