gpt4 book ai didi

java - HashSet 添加重复字符串

转载 作者:行者123 更新时间:2023-11-29 09:28:50 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com