Deux façons de formater
Java formate les chaînes à partir d'un modèle contenant des spécificateurs de format (les marqueurs %) ainsi que les valeurs à insérer. Il existe deux points d'entrée, et ils partagent une syntaxe identique :
String.format(template, values...)renvoie une nouvelleString.System.out.printf(template, values...)affiche directement le résultat.
Les deux produisent le même texte. String.format vous le renvoie pour que vous puissiez le stocker ; printf l'écrit dans la console. Notez le %n à la fin du modèle de printf - c'est le saut de ligne indépendant de la plateforme (préférez-le à \n dans les chaînes de format).
Les spécificateurs courants
Chaque spécificateur commence par % et se termine par une lettre qui indique le type de valeur attendu :
Les trois utilisés au quotidien sont %s (n'importe quelle valeur, via son toString), %d (nombres entiers) et %f (décimaux). Utilisez %% pour afficher un signe pourcent littéral. Passer le mauvais type - par exemple une String à %d - lève une IllegalFormatConversionException à l'exécution.
Contrôler les décimales
%f utilise par défaut six décimales, ce qui correspond rarement à ce que vous voulez. Placez .N avant le f pour fixer la précision (la valeur est arrondie) :
Ajoutez l'indicateur de virgule pour les séparateurs de groupement sur les grands nombres :
Largeur et remplissage
Un nombre entre le % et la lettre de type définit une largeur de champ minimale, en complétant par des espaces pour que les colonnes s'alignent. Un - en tête aligne à gauche ; un 0 en tête complète les nombres avec des zéros :
C'est ce qui rend lisibles les tableaux formatés et les rapports alignés :
Le %-8s aligne les noms à gauche dans une colonne de 8 de large et %5d aligne les scores à droite dans une colonne de 5 de large, de sorte que les nombres s'alignent quel que soit le nombre de chiffres.
Ordre des arguments
Par défaut, les spécificateurs consomment les valeurs de gauche à droite. Vous pouvez répéter ou réordonner une valeur avec N$ (indice commençant à un), pratique lorsque la même valeur apparaît deux fois :
%1$s fait référence au premier argument les deux fois, donc echo s'affiche deux fois.
La méthode formatted()
Depuis Java 15, chaque chaîne possède une méthode d'instance formatted - le même moteur que String.format, simplement écrit comme un appel de méthode sur le modèle :
Elle se marie particulièrement bien avec les text blocks (chaînes multilignes entre triples guillemets) pour construire des sorties formatées plus volumineuses.
Quand ne pas utiliser String.format
Pour de simples jointures ponctuelles, la concaténation classique avec + est plus claire et plus rapide :
String greeting = "Hi, " + name + "!"; // simpler than String.format here
Faites appel à String.format / printf quand vous avez besoin d'un vrai formatage - décimales fixes, remplissage, alignement, groupement - et pas seulement pour coller quelques valeurs.
Suite : Les opérateurs
Le formatage transforme des valeurs en texte. Pour calculer ces valeurs en premier lieu, vous avez besoin des opérateurs de Java - arithmétiques, de comparaison et logiques. C'est la page suivante.
Questions fréquentes
Comment formater une chaîne en Java ?
Utilisez String.format(template, values...), qui renvoie une nouvelle chaîne où chaque spécificateur de format est remplacé par une valeur : String.format("%s is %d", name, age). Pour afficher directement au lieu de construire une chaîne, utilisez System.out.printf(...) avec le même modèle. Depuis Java 15, vous pouvez aussi appeler template.formatted(values...).
Comment formater un nombre à deux décimales en Java ?
Utilisez le spécificateur %.2f : String.format("%.2f", 3.14159) produit "3.14". Le nombre après le point indique combien de décimales conserver, et la valeur est arrondie. Pour les séparateurs de milliers, ajoutez l'indicateur de virgule : %,.2f donne "1,234.57".
Quelle est la différence entre String.format et printf en Java ?
Ils utilisent exactement les mêmes spécificateurs de format. String.format(...) renvoie le texte formaté sous forme d'une nouvelle String que vous pouvez stocker ou transmettre. System.out.printf(...) écrit le texte formaté directement sur la sortie standard et ne renvoie rien d'utile. Utilisez String.format pour construire une chaîne et printf pour en afficher une.