java - 如何从 ArrayList 中删除重复的联系人
问题描述
我对重复的联系人有很大的问题。使用以下命令对数组进行排序后:
Collections.sort(mAllContacts);
我正在阅读以下联系人:
ContentResolver cr = mContext.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if ((cur != null ? cur.getCount() : 0) > 0) {
while (cur != null && cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
if (cur.getInt(cur.getColumnIndex(
ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
contacts = new AllContacts(name, phoneNo);
mAllContacts.add(contacts);
}
pCur.close();
}
}
}
if (cur != null) {
cur.close();
}
通过这种方式,所有联系人都会被检索到一个列表(本地存储、Sim、Gmail 等)。我可以像这样按名称删除重复的联系人:
for (int i = 0; i < mAllContacts.size() - 1; i++) {
if (mAllContacts.get(i).getmContactName().equals(mAllContacts.get(i + 1).getmContactName())) {
Log.d("duplicatedArray", "setAdapter: " + mAllContacts.get(i).getmContactName());
mAllContacts.remove(i+1);
}
}
但这不是一个好习惯,因为有时不同的联系人可能有相同的名字,所以我可以用相同的方法删除重复的联系人,但使用:
mAllContacts.get(i + 1).getmPhoneNumber()
问题来了:由于某种原因,从 gmail、本地存储、sim 读取时,电话号码的格式不同。例如。
Gmail phone number : +972-54-333-55-88
Local storage phone number : +972-543335588
Sim : +972543335588
如何解决我的问题以删除重复值。是的,我需要从他们出现的所有地方读取联系人(gmail、本地存储、sim)
解决方案
应用正则表达式将相同的电话号码更改为通用格式,例如
class Main {
public static void main(String args[]) {
String p1 = "+972-54-333-55-88";
String p2 = "+972-543335588";
String p3 = "+972543335588";
String p4 = "+97(2543)335588";
String p5 = "+97 2543 335588";
String regex = "[^0-9+]";
System.out.println(p1.replaceAll(regex, ""));
System.out.println(p2.replaceAll(regex, ""));
System.out.println(p3.replaceAll(regex, ""));
System.out.println(p4.replaceAll(regex, ""));
System.out.println(p5.replaceAll(regex, ""));
}
}
输出:
+972543335588
+972543335588
+972543335588
+972543335588
+972543335588
推荐阅读
- oracle - oracle物化视图快速刷新
- powershell - 使用powershell将多个子文件夹中的PDF与pdftk合并,然后删除原始PDF文件
- pyjwt - 如何使用 pyjwt 生成刷新令牌和访问令牌?
- python - 当我键入 open() 时,PyCharm 会显示这个巨大的提示。如何禁用它或使其更小?
- push-notification - 通知声音在 Redmi android 9 和 android 11 中不起作用
- mongodb - 将unix时间戳转换为mongodb图表中新字段的日期
- docker - 在 ubuntu 中运行 docker 映像时出现无效参数错误
- javascript - 在创建频道时,permissionOverwrites 无法正常工作
- regex - pyspark 数据框的拆分列基于“%”符号
- javascript - 节点无法识别任何模块