2017-05-09 64 views
1

我正在開發Android應用程序,其中我想比較EditText中的一些字符串值。char「 u200B」會自動添加到EditText

例如,在第一個EditText中,我開始輸入「dav」,然後從鍵盤建議中選擇「David」。在第二個EditText中,我開始輸入「dav」,然後從鍵盤建議中選擇「David」,然後將內容更正爲「Dav」。

每一個似乎是確定。如果我檢索EditText的內容(與getEditableText().toString().trim())調試器告訴我,「大衛」是一個由5個字符,3個字符組成的「DAV」字組成詞。

如果我現在點擊含有「DAV」,我從鍵盤建議選擇「大衛」的EditText,調試器告訴我,這個詞「大衛」是由6個字符組成。最後一個字符是「\ u200B」。

爲什麼這個字符是自動添加的,我怎樣才能以通用的方式刪除它?

謝謝你的幫助。

+0

是它發生的時間或在建議選擇的情況下?如果建議而已,然後它會默認添加空間,您可以用的時候修剪()獲得價值 – Pavan

+0

@Pavan:看來我每次從非空的EditText選擇一個建議的時間。當我從空的EditText中選擇一個建議時,我沒有問題。我已經在'toString()'之後使用'trim()'方法。 – rolandl

+0

作爲建議可能包含額外的空間造成這種情況,修剪()工作或ü面臨任何其他問題? – Pavan

回答

-1

它應該是gettext的()。的toString()。修剪()。

+0

嗨,我已經嘗試使用'getText()'方法,但結果完全相同。我不能在'getText()'之後使用'trim()'方法。 – rolandl

+0

@Sushobh它應該是getText()。的toString()。 trim()不是getText()。修剪()。的toString() – Pavan

0

\u200B是一個Unicode字符zero width space。在我看來,它正在通過您使用的鍵盤添加。我假設如果你改變你的鍵盤有可能你不會看到這種行爲。來處理

一種方法是更換該字符和處理實際String

 


    @Test 
    public void zero_space_character() { 
     String David = "David\u200B"; 
     String theRealDavid = David.replace("\u200B", ""); 
     assertNotEquals(David, theRealDavid); 
     assertEquals("David", theRealDavid); 
    }