我的应用程序在通话记录中提供了一个数字列表。
不幸的是,我遇到了一个小问题。我的应用程序单独列出以下数字(即使它们是相同的数字)。有没有办法将我的应用程序中的一个数字分组? 我想对所有国家/地区的数字应用方法。
示例:的
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
。
答案 0 :(得分:1)
我假设所有数字都属于美国
迭代时,您需要将所有数字转换为列表中的标准格式。
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 帖子。