CodeGym /Corsi /JAVA 25 SELF /Formattazione delle stringhe

Formattazione delle stringhe

JAVA 25 SELF
Livello 9 , Lezione 2
Disponibile

1. Il problema della concatenazione manuale

Se bisogna stampare una o due variabili, l’operatore + è davvero comodo. Ma quando i dati sono molti, la concatenazione diventa rapidamente caotica, soprattutto se serve la formattazione dei numeri (per esempio, 2 cifre decimali) o gli a-capo.

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

System.out.println("Nome: " + name + ", età: " + age + ", saldo: " + balance + " euro.");

Il tentativo di «aggiustare» la formattazione all’interno della concatenazione peggiora solo la leggibilità:

System.out.println("Nome: " + name + ", età: " + age + ", saldo: " + String.format("%.2f", balance) + " euro.");

Conclusione: la concatenazione semplice va bene per le piccole cose, ma per messaggi complessi serve uno strumento più potente — String.format().

2. String.format — formattiamo le stringhe in modo professionale

Il metodo String.format() permette di creare una stringa a partire da un modello e sostituire i valori nelle posizioni indicate.

Forma generale:

String result = String.format("Modello", znacheniya);
  • %s — stringa
  • %d — intero
  • %f — numero in virgola mobile
  • %n — a-capo (multipiattaforma)
String name = "Oleg";
int age = 25;
double balance = 12345.6789;

String info = String.format("Nome: %s, età: %d, saldo: %.2f euro.", name, age, balance);
System.out.println(info);
// Stamperà: Nome: Oleg, età: 25, saldo: 12345.68 euro.

String result = String.format("Nome: %s, età: %d, saldo: %.2f euro", name, age, balance);
// %s — stringa, %d — intero, %.2f — numero con 2 cifre decimali

Formattazione di numeri e stringhe

Numeri in virgola mobile con precisione fissa:

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

Larghezza del campo e allineamento:

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

[5d] — larghezza del campo 5, allineamento a destra di default;
[-5d] — larghezza del campo 5, allineamento a sinistra.

Stringhe con allineamento:

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

Percentuali:

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

Per stampare il simbolo di percentuale, usa %%.

Formattazione delle date (in breve)

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

Localizzazione e separatori

Per impostazione predefinita viene usata la locale del sistema. Per impostarne una propria (ad esempio, la virgola come separatore dei decimali), passa una locale — per esempio, Locale.FRANCE.

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

Esempi pratici

Esempio 1: Report breve

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

String report = String.format(
    "Dipendente: %s%nAttività completate: %d%nOre impiegate: %.1f",
    name, tasks, hours
);
System.out.println(report);

/* Output:
Dipendente: Anna
Attività completate: 5
Ore impiegate: 12.3
*/

Esempio 2: Tabella con allineamento

String header = String.format("%-10s | %5s | %8s", "Nome", "Punti", "Tempo");
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);

/* Output:
Nome       | Punti |    Tempo
Oleg       |    95 |    10.50
Anna       |   100 |     9.75
*/

Esempio 3: Testo misto

int apples = 12;
int pears = 8;
System.out.println(String.format("Ho %d mele e %d pere.", apples, pears));

3. Pratica: formattazione delle stringhe nella nostra applicazione

Aggiungiamo la formattazione a un’applicazione da console: saldo sempre con due cifre decimali, a-capo tramite %n.

Scanner console = new Scanner(System.in);

System.out.print("Inserisci il nome: ");
String name = console.nextLine();

System.out.print("Inserisci l'età: ");
int age = console.nextInt();

System.out.print("Inserisci il saldo: ");
double balance = console.nextDouble();

// Output formattato
String info = String.format("Nome: %s, età: %d, saldo: %.2f euro.", name, age, balance);
System.out.println(info);

Provate:

  • Inserire valori diversi e verificare che il saldo venga sempre stampato con due cifre decimali (%.2f).
  • Modificare il modello per aggiungere gli a-capo usando %n.

4. Errori tipici nella formattazione delle stringhe

Errore n. 1: mancata corrispondenza tra tipi e specificatori.
Non si può sostituire una stringa in %d o un numero in %s.

String.format("Età: %d", "venti"); // Errore: ci si aspettava un numero, è stata passata una stringa

Errore n. 2: ordine degli argomenti invertito.
Nel modello %s %d, se si passa prima un numero e poi una stringa, si otterrà un errore o un output errato.

Errore n. 3: ignorare la locale.
Se ci si aspetta la virgola come separatore decimale ma si vede il punto, specificare esplicitamente la locale come primo parametro di String.format(...).

Errore n. 4: simbolo di percentuale non escapato.
Per stampare il simbolo %, usare %%, altrimenti la formattazione fallirà con un errore.

1
Compito
JAVA 25 SELF, livello 9, lezione 2
Bloccato
Output formattato del nome e dell'età
Output formattato del nome e dell'età
1
Compito
JAVA 25 SELF, livello 9, lezione 2
Bloccato
Formattazione di un numero a virgola mobile
Formattazione di un numero a virgola mobile
1
Compito
JAVA 25 SELF, livello 9, lezione 2
Bloccato
Formattazione della tabella con allineamento
Formattazione della tabella con allineamento
1
Compito
JAVA 25 SELF, livello 9, lezione 2
Bloccato
Formattazione del rapporto con percentuale e localizzazione
Formattazione del rapporto con percentuale e localizzazione
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION