2012-04-19 3 views
0

Je travaillais sur un problème où j'ai besoin de convertir un alpha-numérique donné String au format texte (je ne sais pas exactement comment l'appeler). Example: a = 2, c = 222, f = 333 etc. Pour le rendre plus clair, cela se trouve sur le clavier de votre téléphone. Comme la façon dont vous textez dans les vieux téléphones à clé qui n'avaient pas de clavier QWERTY.Chaîne alphanumérique aux frappes correspondantes

Example: (INPUT) hello (OUTPUT) 44+33+555+555+666

Voici ce que j'avais à l'esprit. Je peux pré-charger tous les cas (26 + 10 sur tout) dans un HashMap et l'utiliser. Mais je pense qu'il devrait y avoir une autre meilleure façon de faire cela bien? Toutes/toutes les idées brillantes sont les bienvenues.

+1

Tous les exemples d'un problème de conversion doivent toujours afficher des paires d'entrée/sortie. – mellamokb

+1

Si les conversions suivent une formule, vous pouvez simplement calculer la formule ad-hoc. Sinon, je pense que la 'Map' fonctionnerait bien. – twain249

+0

@mellamokb: Voilà, je l'ai édité pour montrer un exemple 'input' et' output' – noMAD

Répondre

1

HashMap serait la façon la plus simple de faire ce que vous voulez

Parce que vous travaillez avec un ensemble statique d'applications, vous voudrez peut-être envisager d'appliquer votre table de consultation en tant que nouvelle classe. Je pense que les internes de la classe peuvent être juste un tableau de chaînes. Lorsque vous effectuez une recherche dans le tableau, vous pouvez soustraire le caractère 'a' du caractère que vous recherchez et qui deviendra l'index du tableau. (pour les caractères de ponctuation, si le résultat de la soustraction n'est pas compris entre 0 et 25, vous pouvez les manipuler avec des cas particuliers). Cette méthode contournera la fonction de hachage et améliorera les performances. Que signifie exactement «format basé sur le texte»?

1

Puisque vous avez besoin de relier des chaînes (ou peut-être de définir des caractères uniques !?) en nombres, il n'y a aucun moyen plus facile que d'utiliser une implémentation de java.util.Map. Pour la partie de calcul, vous pouvez d'abord calculer combien de fois chaque caractère de la chaîne se produit et ensuite ajouter l'occurrence (c) x numberFor (c) (2 x 555 au lieu d'ajouter deux fois 555 dans votre exemple).


Mise à jour: venez à penser, pour des cas particuliers, il pourrait y avoir des optimisations. Par exemple. dans le cas extrême de mappage tout à 0, le calcul devient trivial et aucune hashmap n'est requise;) Ou peut-être tous les nombres sont-ils positifs? Peut-être que chaque caractère alphanumérique correspond à un nombre premier différent?

Questions connexes