首页 > 解决方案 > 仅使用国家代码对手机号码进行排序

问题描述

我有联系电话列表屏幕。我将这些联系人存储在 SQLite 数据库中并从中显示。

我需要过滤仅包含国家代码的手机号码。当用户使用前缀“0”和不带前缀“0”保存相同的号码时。例如 - +919876543211、09876543211、9876543211。当用户像示例一样保存时,我只需要显示带有国家代码的手机号码。

如果用户只保存手机号码需要单独显示或带有前缀“0”表示需要单独显示。

for(int i=0; i < arrayListContact.size()-1; i++){
   if(arrayListContact.get(i).getContact().startsWith("+")){
      plusArrayList.add(arrayListContact.get(i));
   } else if(arrayListContact.get(i).getContact().startsWith("0")){
      zeroArrayList.add(arrayListContact.get(i));
   } else {
      mobileArrayList.add(arrayListContact.get(i));
   }
}

 tempArrayList.addAll(plusArrayList);

for(int i=0; i < tempArrayList.size()-1; i++){
  String mobile = tempArrayList.get(i).getContact();
  String mobileWithout = getMobileNumberAlone(mobile);

for (int j = 0; j < zeroArrayList.size() - 1; j++) {
  if(!zeroArrayList.get(j).getContact().equals("0" + mobileWithout)){
     tempArrayList.add(zeroArrayList.get(j));
  }
}
}

我将 tempArrayList 传递给适配器。但在下面的循环中,它正在无限循环。

标签: javaandroidsortingfor-looparraylist

解决方案


在您的第二个循环中,您将添加到循环数组中,因此循环永远不会结束:

for(int i=0; i < tempArrayList.size()-1; i++)  // always uses latest array size
{
  String mobile = tempArrayList.get(i).getContact();
  String mobileWithout = getMobileNumberAlone(mobile);

  for (int j = 0; j < zeroArrayList.size() - 1; j++) 
  {
    if(!zeroArrayList.get(j).getContact().equals("0" + mobileWithout))
       { tempArrayList.add(zeroArrayList.get(j)); }  // adding to array, infinite loop
  }
}

试试这个:

int tmplen = tempArrayList.size();  // starting size, never changes
for(int i=0; i < tmplen-1; i++)
......

推荐阅读