2012-10-23 69 views
1

我需要刪除字符,如果我添加任何特殊符號的編輯文本,而我正在輸入數據,例如我輸入一個單詞smwinææ是一個特殊字符,所以如果我添加chareter編輯文本應該刪除æ和通過替換æ.i使用的文本更改偵聽器來僅顯示smwin。檢查以下在android中使用edittext時刪除特殊字符;

email.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
      // Abstract Method of TextWatcher Interface. 
      System.out.println("started after"); 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      System.out.println("started"); 

      // Abstract Method of TextWatcher Interface. 
     } 

     public void onTextChanged(CharSequence searchcontact, int start, 
       int before, int count) { 
      System.out.println("sssssssssss"+searchcontact); 
      String a=searchcontact.toString(); 
      System.out.println("casted "+a); 
      String[] parts = a.split(" "); 
      String lastWord = parts[parts.length - 1]; 
      System.out.println("------------------------------"+lastWord); 

//    String lastWord = a.substring(a.lastIndexOf(" ")+1); 
//    System.out.println("lastword"+lastWord); 
      if(a.equals("p")) 
      { 

      try { 
       email.getText().delete(email.getSelectionEnd() - 1, email.getSelectionStart()); 
      } catch (Exception e) { 
       try { 
        email.getText().delete(email.length() - 1, email.length()); 
       } catch (Exception myException) { 
       //textfield.getText().delete(textfield.length(), textfield.length() - 1); 
       } 
      } 
      // Method User For Sort Out THE Words 
             // in 
             // The SearchBar 
      } 
     } 

    }); 

這裏的代碼時,文本更改我試圖讓字符串中的最後一個字,但我沒有盡到this.used

字符串A = searchcontact.toString(); System.out.println(「casted」+ a); String [] parts = a.split(「」); String lastWord = parts [parts.length - 1];

獲得的最後一個字,但它打印在的EditText整個字符串我怎麼能做到這一點,請幫助

回答

1

您可以將TextWatcher增加一個EditText並獲得每個文本通知時間通知。使用它,你可以解析字符串來查找空格後的字符,並將它們更新爲大寫。

這是我做的一個快速測試,效果非常好(遠非最佳,因爲每次編輯Editable時都會再次調用監聽器...)。

editText.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     String string = s.toString(); 
     int index = -1; 
     while (((index = string.indexOf(' ', index + 1)) != -1) && (index + 1 < string.length())) { 
      // Get character 
      char c = string.charAt(index + 1); 
      if (Character.isLowerCase(c)) { 

       // Replace in editable by uppercase version 
       s.replace(index+1, index + 2, Character.toString(c).toUpperCase()); 
      } 
     } 
    } 
}); 

爲了避免被調用到的時候,你能在一個char []所有的變化,只提交到可編輯的,如果進行了更改。

一個簡單的解決方案可能只是在String上使用split('),將String []中的所有首字母替換爲大寫版本(如果需要),並且只向Commitable提交一次。

更簡單的優化是爲您的匿名類添加布爾值,將其設置爲當您輸入afterTextChanged時嘗試,退出時將其設置爲false,並且只在布爾值爲false時處理字符串。

+0

海感謝您的回答,但我soved它我重新換行字符串a = searchcontact.toString(); System.out.println(「casted」+ a); String [] parts = a.split(「」); String lastWord = parts [parts.length - 1];用String a = searchcontact.toString(); System.out.println(「casted」+ a); String [] parts = a.split(「」); String lastWord = parts [parts.length - 1]; – Ramz