java - 仅使用国家代码对手机号码进行排序
问题描述
我有联系电话列表屏幕。我将这些联系人存储在 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 传递给适配器。但在下面的循环中,它正在无限循环。
解决方案
在您的第二个循环中,您将添加到循环数组中,因此循环永远不会结束:
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++)
......
推荐阅读
- javascript - 单击按钮后初始化并运行第 3 方
- driver - Buildroot:构建具有未知主编号的设备表
- dev-c++ - 我正在使用 Dev C++,但减法不起作用
- windows-subsystem-for-linux - ddev 可以与 WSL(Linux 的 Windows 子系统)一起使用吗?
- javascript - 按下提交按钮时使用javascript获取特定表单的输入值
- google-apps-script - 谷歌脚本从特定谷歌工作表通过电子邮件发送 PDF 将所有工作表发送到某些工作表上,而不是其他工作表上
- pycharm - PyCharm 在 Python 控制台中运行脚本
- android - 问题从 android studio 的 assets 文件夹中读取 sqlite 版本 3
- ruby-on-rails - 如何创建特定于 Rails 的 Rubygem?
- elasticsearch - Elastic Search 使数字字段得分具有最终相关性