String.format în Kotlin

Construiește un text după un șablon cu marcaje ca %d, %s, %.2f, de exemplu pentru numere cu două zecimale.

Sintaxă
fun String.format(vararg args: Any?): String
fun String.format(locale: Locale?, vararg args: Any?): String
String.format(format: String, vararg args: Any?): String

Ce face String.format

"%.2f lei".format(suma) pune valoarea suma în locul marcajului %.2f, rotunjită la două zecimale. Marcajele cele mai folosite: %s (text), %d (număr întreg), %f (zecimal), %5d (lățime de 5 caractere), %05d (cu zerouri în față), %-10s (aliniat la stânga). Pentru % literal scrii %%.

Funcția folosește regulile lui java.util.Formatter și limba implicită a sistemului: pe un calculator setat în română, %.2f poate afișa virgulă zecimală. Pentru un rezultat identic peste tot, dă un Locale ca prim argument: "%.2f".format(Locale.ROOT, x).

Se poate scrie și String.format("%d", n), ca în Java. Pentru afișări simple, string templates sunt suficiente; format este util când ai nevoie de zecimale fixe sau coloane aliniate.

Parametri

Parametru Descriere
locale Opțional: regulile de formatare (separator zecimal, de mii).
args Valorile puse, în ordine, în locul marcajelor.

Ce returnează

Textul formatat (String).

Exemple

Exemplul 1: Zecimale fixe și Locale

Locale.ROOT folosește punct zecimal, iar Locale.forLanguageTag("ro-RO") folosește regulile românești: virgulă zecimală și punct pentru mii.

import java.util.Locale

fun main() {
    val total = 1234.5678
    println("%.2f lei".format(Locale.ROOT, total))
    println("%,.2f lei".format(Locale.forLanguageTag("ro-RO"), total))
    println("%.0f%%".format(Locale.ROOT, 87.6))
}

Rezultat

1234.57 lei
1.234,57 lei
88%

Exemplul 2: Tabel cu coloane aliniate

%-10s aliniază numele la stânga pe 10 caractere, iar %3d nota la dreapta pe 3.

fun main() {
    val elevi = listOf("Ana" to 10, "Constantin" to 9, "Ion" to 7)
    println(String.format("%-10s %4s", "Nume", "Nota"))
    for ((nume, nota) in elevi) {
        println(String.format("%-10s %4d", nume, nota))
    }
}

Rezultat

Nume       Nota
Ana          10
Constantin    9
Ion           7

Exemplul 3: Mai multe valori și zerouri în față

Marcajele se completează în ordine; %05d completează numărul cu zerouri până la 5 cifre.

fun main() {
    val nume = "Maria"
    val comanda = 42
    val produse = 3
    println("Comanda #%05d: %s a cumpărat %d produse".format(comanda, nume, produse))
}

Rezultat

Comanda #00042: Maria a cumpărat 3 produse

Greșeli frecvente

  • Dai un Int pentru %f sau un Double pentru %d. Tipurile trebuie să se potrivească; altfel primești IllegalFormatConversionException.
  • Te bazezi pe punctul zecimal în %.2f fără Locale. Pe alt calculator rezultatul poate avea virgulă; dă Locale.ROOT dacă textul este citit de alt program.

Comenzi înrudite

  • String.padStart: Completează textul la o lungime dată, adăugând un caracter la început (padStart) sau la final (padEnd).
  • String templates ($nume, ${expresie}): Pun valoarea unei variabile sau a unei expresii direct în text, cu $nume sau ${expresie}.
  • println: Afișează o valoare pe ecran: println trece apoi la rând nou, print rămâne pe același rând.
  • round: Rotunjesc un număr zecimal: round la cel mai apropiat întreg, floor în jos, ceil în sus, truncate taie zecimalele.