CodeGym /Cours /JAVA 25 SELF /Mise en forme des chaînes

Mise en forme des chaînes

JAVA 25 SELF
Niveau 9, Leçon 2
Disponible

1. Le problème de la concaténation manuelle

S’il faut afficher une ou deux variables, l’opérateur + est effectivement pratique. Mais quand il y a beaucoup de données, la concaténation devient vite chaotique, surtout s’il faut formater des nombres (par exemple, 2 décimales) ou gérer des retours à la ligne.

String name = "Oleg";
int age = 25;
double balance = 12345.67;

System.out.println("Nom : " + name + ", âge : " + age + ", solde : " + balance + " euros.");

La tentative d’« bricoler » le formatage à l’intérieur de la concaténation ne fait qu’empirer la lisibilité :

System.out.println("Nom : " + name + ", âge : " + age + ", solde : " + String.format("%.2f", balance) + " euros.");

Conclusion : la concaténation simple convient pour les petites choses, mais pour des messages plus complexes il faut un outil plus puissant — String.format().

2. String.format — mise en forme avancée des chaînes

La méthode String.format() permet de créer une chaîne à partir d’un modèle et d’insérer des valeurs à des positions données.

Forme générale :

String result = String.format("Modèle", values);
  • %s — chaîne
  • %d — entier
  • %f — nombre à virgule flottante
  • %n — saut de ligne (multiplateforme)
String name = "Oleg";
int age = 25;
double balance = 12345.6789;

String info = String.format("Nom : %s, âge : %d, solde : %.2f euros.", name, age, balance);
System.out.println(info);
// Affichera : Nom : Oleg, âge : 25, solde : 12345.68 euros.

String result = String.format("Nom : %s, âge : %d, solde : %.2f euros", name, age, balance);
// %s — chaîne, %d — entier, %.2f — nombre avec 2 décimales

Mise en forme des nombres et des chaînes

Nombres à virgule avec précision fixe :

double price = 99.999;
System.out.println(String.format("Prix : %.2f euros.", price)); // Prix : 100.00 euros.

Largeur de champ et alignement :

int n = 7;
System.out.println(String.format("Nombre : [%5d]", n));   // Nombre : [    7]
System.out.println(String.format("Nombre : [%-5d]", n));  // Nombre : [7    ]

[5d] — largeur de champ 5, aligné à droite par défaut;
[-5d] — largeur de champ 5, aligné à gauche.

Chaînes avec alignement :

String text = "Java";
System.out.println(String.format("[%10s]", text));  // [      Java]
System.out.println(String.format("[%-10s]", text)); // [Java      ]

Pourcentages :

double percent = 0.125;
System.out.println(String.format("Terminé : %.1f%%", percent * 100)); // Terminé : 12.5%

Pour afficher le signe pour cent, utilisez %%.

Mise en forme des dates (bref)

import java.util.Date;
Date now = new Date();
System.out.println(String.format("Aujourd’hui : %tD", now)); // Aujourd’hui : 06/18/24
System.out.println(String.format("Heure : %tT", now));       // Heure : 15:42:07

Localisation et séparateurs

Par défaut, la locale du système est utilisée. Pour définir la vôtre (par exemple, la virgule comme séparateur de décimales), passez une locale — par exemple, Locale.FRANCE.

import java.util.Locale;
double price = 1234.56;
System.out.println(String.format(Locale.FRANCE, "%.2f", price)); // 1234,56

Exemples pratiques

Exemple 1 : rapport court

String name = "Anna";
int tasks = 5;
double hours = 12.3456;

String report = String.format(
    "Employé : %s%nTâches effectuées : %d%nHeures passées : %.1f",
    name, tasks, hours
);
System.out.println(report);

/* Sortie :
Employé : Anna
Tâches effectuées : 5
Heures passées : 12.3
*/

Exemple 2 : tableau avec alignement

String header = String.format("%-10s | %5s | %8s", "Nom", "Points", "Temps");
String row1 = String.format("%-10s | %5d | %8.2f", "Oleg", 95, 10.5);
String row2 = String.format("%-10s | %5d | %8.2f", "Anna", 100, 9.75);

System.out.println(header);
System.out.println(row1);
System.out.println(row2);

/* Sortie :
Nom        | Points |    Temps
Oleg       |    95  |    10.50
Anna       |   100  |     9.75
*/

Exemple 3 : texte mixte

int apples = 12;
int pears = 8;
System.out.println(String.format("J'ai %d pommes et %d poires.", apples, pears));

3. Pratique : mise en forme des chaînes dans notre application

Ajoutons la mise en forme à une application console : le solde toujours avec deux décimales, retours à la ligne via %n.

Scanner console = new Scanner(System.in);

System.out.print("Entrez le nom : ");
String name = console.nextLine();

System.out.print("Entrez l'âge : ");
int age = console.nextInt();

System.out.print("Entrez le solde : ");
double balance = console.nextDouble();

// Sortie formatée
String info = String.format("Nom : %s, âge : %d, solde : %.2f euros.", name, age, balance);
System.out.println(info);

Essayez :

  • Saisir différentes valeurs et vérifier que le solde s’affiche toujours avec deux décimales (%.2f).
  • Modifier le modèle afin d’ajouter des retours à la ligne à l’aide de %n.

4. Erreurs typiques lors de la mise en forme des chaînes

Erreur n° 1 : inadéquation entre types et marqueurs.
On ne peut pas injecter une chaîne dans %d ni un nombre dans %s.

String.format("Âge : %d", "vingt"); // Erreur : un nombre était attendu, une chaîne a été fournie

Erreur n° 2 : ordre des arguments inversé.
Le modèle est %s %d, mais vous passez d’abord un nombre puis une chaîne — vous obtiendrez une erreur ou un affichage incorrect.

Erreur n° 3 : ignorer la locale.
Vous vous attendiez à une virgule comme séparateur de décimales, mais voyez un point — spécifiez explicitement la locale voulue via le premier paramètre de String.format(...).

Erreur n° 4 : signe pour cent non échappé.
Pour afficher le signe %, utilisez %%, sinon la mise en forme échouera avec une erreur.

1
Mission
JAVA 25 SELF, niveau 9, leçon 2
Bloqué
Affichage formaté du nom et de l'âge
Affichage formaté du nom et de l'âge
1
Mission
JAVA 25 SELF, niveau 9, leçon 2
Bloqué
Formatage d'un nombre à virgule flottante
Formatage d'un nombre à virgule flottante
1
Mission
JAVA 25 SELF, niveau 9, leçon 2
Bloqué
Formatage du tableau avec alignement
Formatage du tableau avec alignement
1
Mission
JAVA 25 SELF, niveau 9, leçon 2
Bloqué
Formatage du rapport avec pourcentage et locale
Formatage du rapport avec pourcentage et locale
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION