Accueil > Programmer avec Java > Les bases de Java >
Parfois on a besoin de plus de contrôle sur le format de messages ou simplement une façon plus efficace d’afficher plusieurs informations à la console. Cette leçon vous montre comment utiliser la méthode printf
pour afficher des messages formatés en Java.
System.out
qui affiche un message formaté. Il prend un nombre variable d’arguments : le premier est le message formaté, les autres sont les valeurs à insérer dans le message :
1
System.out.printf("message avec drapeaux pour les valeurs", valeur1, valeur2, ...);
%s
pour une valeur de type String
, %d
pour une valeur de type int
et %f
pour une valeur de type double
.+
agit comme opérateur de concaténation si au moins un des opérandes est un String
. L’autre opérande sera converti automatiquement en String
pour l’opération. La concaténation se propage de gauche à droite, alors l’expression "a" + 1 + 2
donne "a12"
; pour obtenir "a3"
, il faut utiliser des parenthèses autour de l’addition : "a" + (1 + 2)
.À la fin de cette leçon vous devrez être en mesure de :
printf
et ses argumentsprintf
, notamment %d
, %f
et %s
.printf
pour afficher des données efficacement à la console.printf
Vous pouvez utiliser la méthode printf()
pour afficher des messages formatés. C’est utile quand vous :
Vous verrez que pour la plupart des situations, vous pouvez utiliser des print
, des println
et de la concaténation pour afficher ces messages au lieu d’utiliser printf
: dans ces cas, c’est une préférence personnelle. Par contre, pour l’affichage uniforme des valeurs décimales ou pour l’alignement du texte, printf
est la seule solution raisonnable.
Reproduire cet exemple dans un fichier nommé PrintGlue.java
et tester la sortie.
Rappel : c’est toujours mieux de taper les exemples vous-même (et découvrir ce que vos outils vous aident à compléter, où se trouvent les symboles sur le clavier, etc.) que de copier-coller l’exemple. Vous gagnerez plus de confiance avec votre capacité à produire du code. C’est la différence entre CRÉER (taper) et UTILISER (copier-coller) du code, même si le code final est le même.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main() {
String name = "Malcolm";
int age = 16;
// AVEC PLUSIEURS PRINT ET PRINTLN (sans concaténation des valeurs)
System.out.print("Mon nom est ");
System.out.print(name);
System.out.print(" et j'ai ");
System.out.print(age);
System.out.println(" ans.");
// AVEC PRINTLN (et concaténation des valeurs)
System.out.println("Mon nom est " + name + " et j'ai " + age + " ans.");
// AVEC PRINTF
System.out.printf("Mon nom est %s et j'ai %d ans.\n", name, age);
}
et la sortie identique pour les trois approches :
1
2
3
Mon nom est Malcolm et j'ai 16 ans.
Mon nom est Malcolm et j'ai 16 ans.
Mon nom est Malcolm et j'ai 16 ans.
printf
La méthode printf
accepte un nombre variable d’arguments. Le premier argument est toujours le String qui définit le format du message à afficher, incluant le texte de base et des drapeaux de formatage pour les valeurs à insérer dans le message. Les prochains arguments sont les valeurs à insérer dans le message, remplaçant chaque drapeau.
1
System.out.printf("message avec drapeaux pour les valeurs", valeur1, valeur2, ...);
Dans dans l’exemple System.out.printf("Mon nom est %s et j'ai %d ans.\n", name, age);
:
"Mon nom est %s et j'ai %d ans.\n"
.
%s
pour une valeur de type String
et %d
pour une valeur de type int
.\n
, parce que printf
ne l’inclut pas; c’est comme print
.name
(de type String qui s’évalue à “Malcolm”). Sa valeur remplacera le %s
, le premier drapeau de formatage.age
(de type int qui s’évalue à 16). Sa valeur remplacera le %d
, soit le dernier drapeau de formatage.Voici un tableau de quelques drapeaux de formatage communs :
Drapeau | Type de valeur | Exemple |
---|---|---|
%s |
String |
"Bonjour %s" |
%S |
String en majuscules |
"Bonjour %S" |
%d |
int en décimal |
"La valeur du rouge est %d" |
%x |
int en hexadécimal |
"La valeur du rouge est #%x" |
%f |
double |
"Le prix est de %f" |
Voici quelques exemples que vous pouvez tester dans une session jshell. Lancez la commande jshell
dans un terminal pour ouvrir une session jshell. Quittez la sesssion avec la commande \exit
.
1
2
3
double PI = 3.141592653589793; // constante pour la valeur de pi
System.out.printf("La valeur de pi est %f.\n", PI);
System.out.printf("La valeur de pi est %.2f.\n", PI);
sortie :
1
2
La valeur de pi est 3.141593.
La valeur de pi est 3.14.
Comme le premier exemple, le premier argument est le String qui définit le format du message. Dans ce cas on utilise le drapeau %f
pour une valeur de type double
. La valeur à insérer est 3.141592653589793
. Par défaut, printf
affiche 6 chiffres après la virgule pour les nombres décimaux. Pour contrôler le nombre de chiffres après la virgule, on peut ajouter un point et un nombre entre le %
et le f
.
Dans le deuxième exemple, on a ajouté .2
pour afficher seulement 2 chiffres après la virgule. Le .2
est un élément optionnel dans le drapeau de formatage pour les valeurs décimales. On peut remplacer 2
par n’importe quel nombre pour afficher ce nombre de chiffres après la virgule.
Voici un tableau présentant quelques options pour le formatage des valeurs décimales :
Drapeau | Exemple | Sortie |
---|---|---|
%f |
"La valeur de pi est %f" |
3.141593 |
%.2f |
"La valeur de pi est %.2f" |
3.14 |
%.0f |
"La valeur de pi est %.0f" |
3 |
1
2
3
4
// Afficher des valeurs en colonnes de largeur fixe
System.out.printf("%-10s %10s\n", "NOM", "ÂGE"); // en-têtes
System.out.printf("%-10s %10d\n", "Malcolm", 16);
System.out.printf("%-10s %10d\n", "Myriam", 17);
sortie :
1
2
3
NOM ÂGE
Malcolm 16
Myriam 17
Ici on a plusieurs instructions printf
, une pour chaque ligne d’un tableau. La première instruction donne les en-têtes, donc les drapeaux de formatage dans le premier argument sont %s
pour une valeur de type String
. Pour spécifier la largeur de colonne, on peut ajouter des éléments optionnels entre %
et le s
. Dans ce cas :
-10
pour spécifier une largeur de 10 caractères et un alignement à gauche.10
pour spécifier une largeur de 10 caractères avec l’alignement par défaut (à droite).10
par n’importe quel nombre pour spécifier la largeur de colonne voulue.Les arguments suivants sont les valeurs à insérer dans le message, dans l’ordre où ils apparaissent dans le message. Donc "NOM"
est inséré à la place de %-10s
et "ÂGE"
est inséré à la place de %10s
.
Pour les lignes suivantes, les valeurs pour “Âge” sont de type int
, alors on utilise le drapeau %d
au lieu de %s
, mais on maintient les mêmes spécifications pour la largeur et l’alignement, donc %10d
au lieu de %10s
. Les valeurs à insérer sont 16
pour la première ligne et 17
pour la deuxième.
Voici un tableau présentant quelques options pour le formatage des colonnes :
Drapeau | Exemple | Effet |
---|---|---|
%-10s |
"Le nom est %-10s" |
colonne de 10 char de large, aligné à gauche |
%10d |
"L'âge est %10d" |
colonne de 10 char de large, aligné à droite |
%-10.2f |
"Le prix est %-10.2f" |
colonne de 10 char de large, aligné à gauche avec 2 places après la virgule |
Quiz quiz de vérification sur printf
Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices
Print2.java
et y ajouter la structure de base (méthode main
).main
, reproduire les trois instructions printf
ci-dessus pour produire un tableau formaté pour les noms et les âges.