2010-11-12 15 views
0

Dans Android si j'ai un texte d'édition et l'utilisateur entré 123456789012, comment pourrais-je obtenir le programme pour insérer un tiret tous les 4 caractères. c'est-à-dire: 1234-5678-9012?Manipulation de chaîne insérer un caractère tous les 4 caractères

Je suppose que vous devez dire quelque chose du genre: - a = Caractères 1 ~ 4, b = Caractères 5 ~ 8, c = Caractères 9-12, Résultat = a + "-" + b + " - "+ c. Mais je ne suis pas sûr de comment cela ressemblerait à Android.

Un grand merci pour toute aide.

Répondre

5
String s = "123456789012"; 
String s1 = s.substring(0, 4); 
String s2 = s.substring(4, 8); 
String s3 = s.substring(8, 12); 

String dashedString = s1 + "-" + s2 + "-" + s3; 
//String.format is extremely slow. Just concatenate them, as above. 

substring() Reference

+0

brillant. Merci pour cette réponse très claire. Très appréciée. – Entropy1024

+0

Eclipse souligne la sous-chaîne et j'obtiens l'erreur suivante lorsque j'essaie ceci La méthode substring (EditText, int, int) est indéfinie pour le nouveau type View.OnClickListener() {} Que faire? – Entropy1024

+0

Voir ma publication éditée. –

1

façon alternative:

String original = "123456789012"; 
int dashInterval = 4; 
String withDashes = original.substring(0, dashInterval); 
for (int i = dashInterval; i < original.length(); i += dashInterval) { 
    withDashes += "-" + original.substring(i, i + dashInterval); 
} 

return withDashes; 

Si vous avez besoin de passer des chaînes avec des longueurs qui ne sont pas des multiples de la dashInterval que vous auriez à écrire un peu plus pour gérer que pour empêcher l'index hors des limites non-sens.

4

Ou une autre alternative en utilisant un StringBuilder plutôt que de diviser la chaîne en plusieurs parties, puis les rejoindre:

String original = "123456789012"; 
int interval = 4; 
char separator = '-'; 

StringBuilder sb = new StringBuilder(original); 

for(int i = 0; i < original.length()/interval; i++) { 
    sb.insert(((i + 1) * interval) + i, separator); 
} 

String withDashes = sb.toString();