Android ArrayList过滤特殊字符

时间:2013-07-04 11:00:24

标签: android arraylist filter

在我的应用程序中,我有一个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));
    }

3 个答案:

答案 0 :(得分:0)

您可以使用PhoneNumberUtils.stripSeparators(字符串)(在API 1 +中提供)。

或者您可以使用正则表达式:

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

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

答案 1 :(得分:0)

什么是联系人? 我想你必须用replaceAll旧字符替换每个你的arraylist到新的字符

for (Contact contact : contacts)
   contact.getText.replaceAll("@"," ");

答案 2 :(得分: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));
            }
        }
    }