0

在我的应用程序中,我有一个 ArrayList,其中包含我的电话簿的所有联系人。

不幸的是,有像“tom@test.com”这样的记录。如何删除所有带有特殊字符的记录,以便我只得到只有字母的记录?

        Cursor cur = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI,
            new String[] { ContactsContract.Contacts.DISPLAY_NAME }, null,
            null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");
    int i = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
        contacts.add(cur.getString(i));
    }
4

3 回答 3

0

您可以使用 PhoneNumberUtils.stripSeparators(String)(在 API 1+ 中可用)。

或者你可以使用正则表达式‌​:

filterNum = filterNum.replaceAll("[^0-9]+", "");

这将删除所有不在 0...9 范围内的字符。我认为这会更容易。这是文档。

于 2013-07-04T11:08:16.463 回答
0

什么是联系方式??我认为你必须用 replaceAll old char to new char 替换你的每个数组列表

for (Contact contact : contacts)
   contact.getText.replaceAll("@"," ");
于 2013-07-04T11:08:51.573 回答
0

我认为应该是这样的(如果这不是问题的解决方案,请写信给我:)):

boolean specialChar;
    Cursor cur = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI,
            new String[] { ContactsContract.Contacts.DISPLAY_NAME }, null,
            null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");
    int i = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
        //          contacts.add(cur.getString(i));
        specialChar = false;
        for(char c : cur.getString(i).toCharArray()){
            specialChar = false;
            if(!Character.isDigit(c) || !Character.isLetterOrDigit(c)){
                specialChar = true;
            }
            if(!specialChar){
                contacts.add(cur.getString(i));
            }
        }
    }
于 2013-07-04T11:22:16.537 回答