Ce face String.format
String.format(șablon, valori...) returnează un text în care fiecare specificator care începe cu % este înlocuit cu următoarea valoare. Cei mai folosiți: %s (text, orice obiect), %d (întreg), %f / %.2f (număr real, cu 2 zecimale), %c (caracter), %b (boolean), %x (hexazecimal), %n (rând nou), %% (semnul procent).
Între % și literă poți da lățimea: %5d (aliniat la dreapta pe 5 poziții), %-10s (la stânga pe 10), %05d (completat cu zerouri), %,d (separator de mii). "șablon".formatted(valori) (Java 15) face exact același lucru, dar se apelează pe șablon.
Formatarea numerelor depinde de Locale: fără argument se folosește limba implicită a sistemului (aici engleză, cu punct zecimal). Cu Locale.of("ro", "RO") obții virgulă zecimală și punct pentru mii. System.out.printf folosește aceleași reguli, dar afișează direct.
Parametri
| Parametru | Descriere |
|---|---|
l |
Opțional: regulile regionale pentru numere și date. |
format |
Șablonul cu specificatori %…. |
args |
Valorile, în ordinea specificatorilor. |
Ce returnează
Textul formatat. Un specificator nepotrivit cu tipul valorii aruncă IllegalFormatException.
Exemple
Exemplul 1: Specificatorii de bază
public class Main {
public static void main(String[] args) {
String nume = "Ana";
int varsta = 21;
double media = 9.456;
System.out.println(String.format("%s are %d de ani.", nume, varsta));
System.out.println(String.format("Media: %.2f", media));
System.out.println(String.format("Nota %d din %d (%d%%)", 9, 10, 90));
System.out.println(String.format("Cod: %05d, hexa: %x, bool: %b", 42, 255, true));
System.out.println("%s locuiește în %s.".formatted(nume, "Iași"));
}
}
Rezultat
Ana are 21 de ani.
Media: 9.46
Nota 9 din 10 (90%)
Cod: 00042, hexa: ff, bool: true
Ana locuiește în Iași.
Exemplul 2: Tabel aliniat
%-10s aliniază numele la stânga pe 10 caractere, %8.2f prețul la dreapta pe 8.
public class Main {
public static void main(String[] args) {
String[] produse = {"Pâine", "Lapte", "Cașcaval"};
double[] preturi = {4.5, 7.99, 32.0};
for (int i = 0; i < produse.length; i++) {
System.out.println(String.format("%-10s %8.2f lei", produse[i], preturi[i]));
}
System.out.printf("%-10s %8.2f lei%n", "Total", 44.49);
}
}
Rezultat
Pâine 4.50 lei
Lapte 7.99 lei
Cașcaval 32.00 lei
Total 44.49 lei
Exemplul 3: Formatare românească
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Locale ro = Locale.of("ro", "RO");
double salariu = 7543.5;
System.out.println(String.format("%,.2f lei", salariu));
System.out.println(String.format(ro, "%,.2f lei", salariu));
System.out.println(String.format(ro, "%,d locuitori", 290422));
}
}
Rezultat
7,543.50 lei
7.543,50 lei
290.422 locuitori
Greșeli frecvente
- Folosești
%dpentru undouble: primeștiIllegalFormatConversionException. Pentru numere cu zecimale folosește%fsau%.2f. - Scrii
\nîn șablon; merge, dar%npune terminația corectă de rând pentru sistemul pe care rulează programul. - Uiți că rezultatul depinde de limba sistemului: pe un calculator setat în română,
%.2fafișează virgulă. Dacă rezultatul este citit de un program, dă explicitLocale.ROOT.
Comenzi înrudite
String.valueOf: Transformă orice valoare (număr, boolean, char, obiect, char[]) în String; copyValueOf face un șir dintr-un char[].String.repeat: Returnează șirul repetat de count ori, lipit; util pentru linii, chenare și alinieri.Integer.toString: Transformă un număr întreg în text, în baza 10 sau în orice bază între 2 și 36.