2017-05-09 4 views
1

Je travaille sur une application Android dans laquelle je voudrais comparer certaines valeurs de chaînes en EditText.Le caractère " u200B" est automatiquement ajouté à l'EditText

Par exemple, dans un premier EditText, je commence à entrer "dav", puis sélectionnez "David" à partir des suggestions du clavier. Dans un deuxième EditText, je commence à entrer "dav", puis sélectionnez "David" à partir des suggestions du clavier, puis corriger le contenu à "Dav".

Tout semble être OK. Si je récupère le contenu du EditText (avec getEditableText().toString().trim()) le débogueur me dit que "David" est un mot composé de 5 caractères et "Dav" un mot composé de 3 caractères.

Si maintenant je clique sur le EditText qui contient "Dav" et je sélectionne "David" à partir des suggestions du clavier, le débogueur me dit que le mot "David" est composé de 6 caractères. Le dernier caractère est "\ u200B".

Pourquoi ce caractère est automatiquement ajouté et comment puis-je le supprimer de manière générique?

Nous vous remercions de votre aide.

+0

est-il arrive tout le temps ou en cas de sélection de suggestions? si suggestions seulement alors il ajoutera de l'espace par défaut vous pouvez utiliser trim() au moment d'obtenir la valeur – Pavan

+0

@Pavan: Il apparaît chaque fois que je sélectionne une suggestion d'un EditText pas vide. Lorsque je sélectionne une suggestion d'un EditText vide, je n'ai pas le problème. J'utilise déjà la méthode 'trim()' après celle de 'toString()'. – rolandl

+0

comme les suggestions peuvent contenir de l'espace supplémentaire causant cela, est-ce que trim() fonctionne ou vous faites face à un autre problème? – Pavan

Répondre

-1

Il doit s'agir de getText(). toString(). réduire().

+0

Salut, j'essaie déjà avec la méthode 'getText()' mais le résultat est exactement le même. Et je ne peux pas utiliser la méthode 'trim()' après celle de 'getText()'. – rolandl

+0

@Sushobh Cela devrait être getText(). toString(). trim() pas getText(). réduire(). toString() – Pavan

0

\u200B est un caractère unicode zero width space. Il me semble que c'est ajouté par le clavier que vous utilisez. Je suppose que si vous changez de clavier, il est possible que vous ne voyiez pas ce comportement.

Une façon de gérer qui remplace ce caractère et traitant de la String réelle:

 


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