java - HashSet 添加重复字符串

标签 java android duplicates hashset

我正在尝试从 android 中的联系人提供者那里获取唯一的电话号码,并且我正在使用 HashSet 添加联系人的不同电话号码

   Set<String> newNumbers = new HashSet<>();

   while(findNumbers.moveToNext()){
      String phone = findNumbers.getString(0);
      phone = phone.replaceAll("[\\s\\-()]", ""); 
      boolean isNumberAdded = newNumbers.add(phone);
      if(isNumberAdded){
         Log.d(TAG,"Phone= " + phone);
       }else{
         Log.d(TAG,"Rejected Phone= " + phone);
         continue;
        }
    }

但是这种情况发生了:

  1. 电话= 0502809903
  2. 电话= +971556072980
  3. 拒绝电话= +971556072980 <- 拒绝重复
  4. 电话= +971552767944
  5. 电话= +971556072980 <-- 接受重复

编辑: 如果字符串是这样创建的,它可以工作,但是我从游标中获取的字符串不起作用。

    ArrayList<String> testing = new ArrayList<String>();
    testing.add("0502809903");
    testing.add("+971556072980");
    testing.add("+971556072980");
    testing.add("+971552767944");
    testing.add("+971556072980");

    Set<String> numbers = new HashSet<>();
    for(String data: testing){

        boolean isNumberAdded = numbers.add(data);
        if(isNumberAdded){
            Log.d("Test","Accepted " + data);
        }else{
            Log.d("Test","Rejected " + data);
        }
    }

Edit2:将数字显示为字符数组,我该如何解决?

  1. 原始 = [0, 5, 0, 2, 8, 0, 9, 9, 0, 3]
  2. 接受电话= 0502809903
  3. 原文 = [, +, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0, ]
  4. 接受电话= +971556072980
  5. 原文 = [, +, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0, ]
  6. 拒绝电话= +971556072980
  7. 原始 = [+, 9, 7, 1, 5, 5, 2, 7, 6, 7, 9, 4, 4]
  8. 接受电话= +971552767944
  9. 原始 = [+, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0]
  10. 接受电话= +971556072980

最佳答案

你的字符串中有垃圾。 试试这个:

boolean isNumberAdded = newNumbers.add(phone.trim());

这应该可以解决问题。

编辑: 或者也许它没有……根据this question ,如果你想删除不可打印的字符,你应该使用以下内容:

boolean isNumberAdded = newNumbers.add(phone.replaceAll("\\p{C}", ""));

让我知道这次是否有效。

关于java - HashSet 添加重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375138/

相关文章:

java - 什么是 Java 中的便捷方法?

android - 过滤掉其他对象 - Android Open CV library

python - 删除列表中的重复项时出现奇怪的行为

excel - 如何根据相似值合并单元格 - Excel 2010

java - 是否有在运行时从 Pojo 动态生成 Swing GUI 的框架?

java - 对接口(interface)重写方法的反射(reflection)

java - recyclerview-selection 如何监听 onSelectionEnter 事件和 onSelectionExit 事件

android - 如何使用 cordova 在人行横道中启用缓存?

java - 为什么 "class"不能用作 JAXB 中的标记名称

mysql - 删除mysql重复条目并使用基于时间戳的最新条目