I am trying to get unique phone numbers from the contact provider in android and I am using a HashSet to add the different phone numbers of a contact
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;
}
}
However this happens:
- Phone= 0502809903
- Phone= +971556072980
- Rejected Phone= +971556072980 <- rejected duplicate
- Phone= +971552767944
- Phone= +971556072980 <-- accepted duplicate
EDIT: If the Strings are created like this, it works however the strings that I get from the cursor does not.
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: displayed the numbers as char arrays, How do I fix it?
- Original = [0, 5, 0, 2, 8, 0, 9, 9, 0, 3]
- Accepted Phone= 0502809903
- Original = [, +, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0, ]
- Accepted Phone= +971556072980
- Original = [, +, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0, ]
- Rejected Phone= +971556072980
- Original = [+, 9, 7, 1, 5, 5, 2, 7, 6, 7, 9, 4, 4]
- Accepted Phone= +971552767944
- Original = [+, 9, 7, 1, 5, 5, 6, 0, 7, 2, 9, 8, 0]
- Accepted Phone= +971556072980