我正在尝试从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;
}
}
然而,这发生了:
电话= 0502809903
电话=+971556072980
拒绝电话=+971556072980电话= +971552767944
电话= +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:将数字显示为char数组,如何解决?
原始= [0、5、0、2、8、0、9、9、0、3]
接受的电话= 0502809903
原始= [,+,9,7,1,5,5,6,0,7,2,9,8,0,]
接受的电话=+971556072980
原始= [,+,9,7,1,5,5,6,0,7,2,9,8,0,]
拒绝电话=+971556072980
原始= [+,9、7、1、5、5、2、7、6、7、9、4、4]
接受的电话= +971552767944
原始= [+,9,7,1,5,5,6,0,7,2,9,8,0]
接受的电话= +971556072980
最佳答案
您的字符串中有垃圾。尝试这个:boolean isNumberAdded = newNumbers.add(phone.trim());
这应该可以解决问题。
编辑:
也许不是。根据this question,如果要删除不可打印的字符,则应使用以下命令:
boolean isNumberAdded = newNumbers.add(phone.replaceAll("\\p{C}", ""));
让我知道这一次是否有效。