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

标签 java android

为了学习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/

相关文章:

java - 为什么InetAddress.getLocalHost().getHostAddress()在android中返回127.0.0.1。但在JAVA程序中工作正常

android - 翻译动画按钮后点击不起作用

android - 本地android服务从本地网页接收数据

android - PullToRefresharp 在设备上不起作用

java - Spring SpEL 错误

Java - 程序在不应该接受负数的情况下接受负数

java - java的TreeMap的效率是基于键还是值的数量?

java - 错误: cannot find symbol class FirebaseInstanceIdService

android - 没有 AJAX 的 cometd

java - 我想在按下按钮时清除纯文本框中的文本,但找不到任何可以执行此操作的内容