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

不幸的是,我遇到了一个小问题。我的应用单独在下面列出了数字(即使它们是相同的数字)。有没有一种方法可以在我的应用中将其分组为一个数字?我想对来自所有国家/地区的数字应用一种方法。

例:

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);
}




如果您的人数不限于美国,则需要编写逻辑以支持其他国家。

请参阅具有类似要求的this帖子。

关于java - 通话记录中号码列表中的逻辑问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39110237/

10-11 00:05