gpt4 book ai didi

java - 使用 Android 应用程序字符串的第一个字符过滤数组列表

转载 作者:行者123 更新时间:2023-12-01 11:39:40 24 4
gpt4 key购买 nike

为了学习android开发,我创建了一个名为“Contacts”的android应用程序,它基本上只是一个电话簿。我有一份包含名字、姓氏和电话号码的联系人列表。我还有一个用于过滤列表的编辑文本。

目前,我可以通过查找包含编辑文本中输入的字符串的所有条目来过滤列表。例如,我有 3 个联系人:

Jane Doe
John Doe
John Joseph Smith

如果我输入“oe”之类的内容,列表将返回 John Doe 和 Jane Doe。现在,我希望可以按姓名首字母进行过滤,这样如果我输入“JS”或“Jo J S”,它将返回 John Joseph Smith,但我不完全确定如何开始此实现。

我已经重写了 FilterResults PerformFiltering,这就是我最终得到的结果:

FilterResults results = new FilterResults();
ArrayList<Contacts> filteredContacts= new ArrayList<Contacts>();

if (constraint!= null && constraint.toString().length() > 0) {
for (Contacts contact : unfilteredContacts) {
String firstname = contact.getFirstname();
String lastname = contact.getLastname();
String phone = contact.getNumber();

if (firstname .toLowerCase().contains(constraint.toString().toLowerCase()) ||
lastname .toLowerCase().contains(constraint.toString().toLowerCase()) ||
phone .contains(constraint.toString())) {
filteredContacts.add(contact);
}
}

results.values = filteredContacts;
results.count = filteredContacts.size();

实现这一点的最佳方法是什么?有什么方法可以避免使用嵌套循环吗?

[更新]我最终使用循环来实现,但是我的代码表现得有点有趣。我添加了此代码 fragment 来执行附加过滤器:

String[] splitName = fullname.toLowerCase().split(" ");
String[] initials = constraint.toLowerCase().split(" ");
if (initials.length > 1) {
for (String nm : splitName) {
for (String ini : initials) {
if (nm.startsWith(ini)) { isMatch = true; }
else { isMatch = false; }
}
}
}
if (isMatch) { filteredContacts.add(contact); }

如果我输入“J D”,它只返回“Jane Doe”,即使它也应该显示“John Doe”。这是怎么回事?

最佳答案

我将使用空格字符分割输入并检查结果数组是否大于一。如果是,则有缩写,因此您必须使用 String 的 startsWith() 方法检查它们。

String[] initials = constraint.split(" ");
if (initials.length == 1) {
//single input, do you 'if' here
} else {
//initials detected, check every string with 'startsWith()' method
}

关于java - 使用 Android 应用程序字符串的第一个字符过滤数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com