Comment formater un numéro de téléphone à une Chaîne de caractères en Java?
J'ai de stocker des numéros de téléphone en tant que longs et je voudrais simplement ajouter des traits d'union lors de l'impression du numéro de téléphone à une chaîne.
J'ai essayé d'utiliser DecimalFormat
mais qui n'aime pas le trait d'union. Probablement parce qu'elle est destinée pour la mise en forme de nombres décimaux et de ne pas longs.
long phoneFmt = 123456789L;
DecimalFormat phoneFmt = new DecimalFormat("###-###-####");
System.out.println(phoneFmt.format(phoneNum)); //doesn't work as I had hoped
Idéalement, je voudrais avoir parenthèse sur le code de zone trop.
new DecimalFormat("(###)-###-####");
Quelle est la bonne façon de le faire?
- Le stockage des numéros de téléphone dans un type numérique comme
long
n'est pas une bonne idée. Les numéros de téléphone sont vraiment un genre de label, pas de numéros que vous voulez effectuer des calculs avec. Que faire si un numéro de téléphone commençant par 0 - on ne pouvait pas la stocker dans un type numérique.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Chaîne de caractères.replaceFirst avec la regex méthode comme
Pour obtenir votre sortie désirée:
Le résultat dans la Console ressemble à ceci:
Pour stocker les numéros de téléphone, vous devriez envisager de à l'aide d'un type de données autres que des chiffres.
La façon la plus simple de le faire est en utilisant le construit en MaskFormatter dans le javax.swing.texte de la bibliothèque.
Vous pouvez faire quelque chose comme ceci :
Si vous avez vraiment besoin de la bonne façon, alors vous pouvez utiliser Google récemment open source libphonenumber
long
est.La pire solution possible serait:
C'est comment j'ai fini par le faire:
Je comprends que cela ne prend pas en charge les numéros internationaux, mais je n'écris pas une "vraie" application, de sorte que je ne suis pas inquiète. Je n'accepte que 10 caractères de long qu'un numéro de téléphone. Je voulais juste l'imprimer avec une mise en forme.
Merci pour les réponses.
Vous pouvez également utiliser https://github.com/googlei18n/libphonenumber. Voici un exemple:
Ici, vous pouvez obtenir votre bibliothèque sur votre classpath: http://mvnrepository.com/artifact/com.googlecode.libphonenumber/libphonenumber
Vous pouvez implémenter votre propre méthode pour le faire pour vous, je vous recommande d'utiliser quelque chose comme cela. À l'aide de
DecimalFormat
etMessageFormat
. Avec cette méthode, vous pouvez utiliser à peu près tout ce que vous voulez (String,Integer,Float,Double
) et la sortie sera toujours à droite.Résultat sera
DecimalFormat
ne permet pas de texte arbitraire dans le nombre à mettre en forme, tout comme un préfixe ou d'un suffixe. Afin de ne pas être en mesure de vous aider.À mon avis, le stockage d'un numéro de téléphone à une valeur numérique qui est faux, entièrement. Que faire si je veux stocker un numéro international? De nombreux pays utilisent
+
pour indiquer un code de pays (par exemple+1
pour les etats-unis/Canada), d'autres utilisent00
(par exemple001
).À la fois de ceux qui ne peuvent pas vraiment être représenté dans un type de données numérique ("ce nombre Est en 1555123 ou 001555123?")
U peut formater une chaîne de caractères contenant des caractères numériques également à votre format souhaité utiliser mon util classe de format
l'utilisation est très simple
de sortie: (123)-456-7890
u pouvez spécifier n'importe quel foramt comme XXX-XXX-XXXX et la longueur du numéro de téléphone , si l'entrée de la longueur est plus grande que la longueur spécifiée, puis de la chaîne sera revue à la baisse.
Obtenir ma classe à partir d'ici: https://github.com/gajeralalji/PhoneNumberUtil/blob/master/PhoneNumberUtil.java
J'aurais pensé que vous devez utiliser un MessageFormat plutôt que DecimalFormat. Qui devrait être plus souple.
Vous pouvez utiliser la sous-chaîne et la concaténation pour faciliter la mise en forme aussi.
Mais une chose à noter est que vous devez vérifier pour la longueur du champ de numéro de téléphone juste pour s'assurer que votre mise en forme est sûre.
Chaîne formatterPhone = String.format("%s-%s-%s", numéro de téléphone.substring(0, 3), numéro de téléphone.sous-chaîne(3, 6), numéro de téléphone.substring(6, 10));
À l'aide de
StringBuilder
pour la performance.