通话记录中的号码列表存在逻辑问题



我的应用程序给出了通话记录中的号码列表。

不幸的是,我遇到了一个小问题。我的应用程序分别列出了下面的数字(即使它们是相同的数字)。有没有办法在我的应用程序中将它们分组为一个数字?我想为所有国家的数字应用一种方法。

例子:

754 - 3010(本地)

(541) 754-3010(国内)

+ 1-541-754-3010(国际)

1-541-754-3010(拨打美国)

001-541-754-3010(从德国拨出)

我的应用程序代码:

Cursor managedCursor = managedQuery( CallLog.Calls.CONTENT_URI,null, null,null, null);
int number = managedCursor.getColumnIndex( CallLog.Calls.NUMBER );
List<String> list = new ArrayList<>();
     while ( managedCursor.moveToNext() ) {
            String phNumber = managedCursor.getString( number );
            list.add(phNumber);
}

我在我的应用程序中显示list

我假设所有的数字都属于美国

你需要在迭代时将列表中的所有数字转换为标准格式。

Set<String> numSet = new HashSet<String>();
while ( managedCursor.moveToNext() ) {
    String phNumber = managedCursor.getString( number );
    //Remove all non-numeric characters
    phNumber = phNumber.replaceAll("[^\d]", "");
    //Remove all leading 0s
    phNumber = phNumber.replaceFirst("^0+(?!$)", "");
    //Remove "1" from the number if size is 11
    phNumber = phNumber.length() == 11 ? phNumber.substring(1,phNumber.length());
    //Format the number
    phNumber = phNumber.replaceFirst("(\d{3})(\d{3})(\d+)", "($1) $2-$3");
    //Check if set already has the number, else put
    if(numSet.get(phNumber) == null) numSet.put(phNumber);
}

如果你的数字不限于美国,你需要写你的逻辑来支持其他国家。

参考这个帖子,它有类似的要求。

最新更新