2013-07-04 89 views
0

在我的應用程序中,我有一個ArrayList與我的電話簿中的所有聯繫人。Android ArrayList過濾特殊字符

不幸的是,有像「[email protected]」這樣的記錄。我如何刪除所有帶有特殊字符的記錄,以便我只收到只有字母的記錄?

 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)); 
    } 

回答

0

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

或者你可以使用正則表達式:

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

這將刪除其不在範圍從0到9的所有字符。我認爲這會更容易。這裏是文檔。

+0

我知道了自己的記錄和Google: 爲(cur.moveToFirst(); cur.isAfterLast(); cur.moveToNext()!){ 如果(cur.getString(I).toLowerCase(! ).contains(「@」。toLowerCase())){ \t contacts.add(cursorContact.getString(i)); } – Tommy

0

什麼是接觸? 我覺得你必須在每回合與舊的replaceAll焦炭的ArrayList更換新的焦炭

for (Contact contact : contacts) 
    contact.getText.replaceAll("@"," "); 
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)); 
      } 
     } 
    }