Je voulais parler du formatage des chaines de caractères non internationalisées et utilisées notamment dans les messages d'erreur, les tests ou ailleurs. Prenons un exemple avec des articles définis de la manière suivante
private class Article { Date dateCreation; String label; String code; int nbLines; }
Si je veux afficher un message lié à mon article je vais retrouver souvent dans le code
System.out.println("error on saving article code=[" + article.getCode() + "] label=[" + article.getLabel() + "] nblines=" + article.getNbLines() + " creation=[" + article.getDateCreation() + "]");
qui donnera le message suivant
error on saving article code=[JAVA54] label=[Formater ces messages] nblines=50 creation=[Fri May 30 16:57:15 CEST 2014]
La classe Formatter offre tout ce qu'il faut pour afficher et formater des des chaines de caractères, des numériques, des booléens et même des dates. Reprenons notre exemple, on pourrait obtenir exactement le même résultat en utilisant
System.out.println(String.format("error on saving article %s label=[%s] nblines=%d write creation=[%s]", article.getCode(), article.getLabel(), article.getNbLines(), article.getDateCreation()));
Les éléments à formater sont identifier par le caractère % et la lettre après indique comment la donnée sera formatée. Quelques exemples
- s : string
- d : decimal
- b : boolean
Personnellement je m'arrête à ces trois formaters. Quand vous ne savez pas trop quoi utiliser, employez %s car tout objet java contient une méthode toString() et avec l'autoboxing pas de surprise avec les types primitifs....
Vous pouvez même formater le message en utilisant des sauts de lignes ou des tabulations.
System.out.println(String.format("error on saving article %s \n\tlabel=[%s] \n\tnblines=%d \n\twrite creation=[%s]", article.getCode(), article.getLabel(), article.getNbLines(), article.getDateCreation()));
Cette portion de code donne
error on saving article JAVA54 label=[Formater ces messages] nblines=50 write creation=[ven. mai 30 16:57:15 CEST 2014]
Vous pouvez avoir un formatage particulier en fonction du type des objets. Par exemple vous voulez afficher une date formatée à la française, à l'anglaise...
String msg = "error on saving article write on [%tc]"; System.out.println(String.format(Locale.FRANCE, msg, article.getDateCreation())); System.out.println(String.format(Locale.ENGLISH, msg, article.getDateCreation()));
Le résultat est le suivant
error on saving article write on [ven. mai 30 17:12:07 CEST 2014] error on saving article write on [Fri May 30 17:12:07 CEST 2014]
Bon voilà je ne sais pas si je vous ai convaincu mais si oui je prendrai plus de plaisir à parcourir le code que vous publiez....
Pour plus d'info je vous réoriente vars la javadoc de Formatter
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.