STRING STATINIAI METODAI

Java String format() metodas

String.format() sukuria suformatuotą tekstą pagal šabloną. Šablone pažymimos vietos, į kurias Java įterpia tekstus, skaičius ir kitas reikšmes.

Pirmasis formatuotas tekstas

String vardas = "Ieva";
int taskai = 18;

String zinute = String.format("%s surinko %d taškų.", vardas, taskai);

System.out.println(zinute);
Konsolės rezultatas

Ieva surinko 18 taškų.

  1. %s yra vieta tekstinei reikšmei.
  2. %d yra vieta sveikajam dešimtainiam skaičiui.
  3. Po šablono perduodami argumentai vardas ir taskai.
  4. Java pirmą argumentą įterpia į pirmą žymeklį, antrą – į antrą.
  5. format() grąžina naują String, kuris išsaugomas kintamajame zinute.

Metodo sintaksė

String.format(String format, Object... args)

String.format(Locale locale, String format, Object... args)

String.format() parametrai
ParametrasPaskirtis
localePasirenkama kalbos ir regiono taisyklė skaičiams bei kitoms lokalizuojamoms reikšmėms.
formatTeksto šablonas su paprastu tekstu ir formato žymekliais.
argsViena ar daugiau reikšmių, kurios įterpiamos į žymeklių vietas.
Grąžinama reikšmėNaujas suformatuotas String.

Trys taškai Object... reiškia, kad metodui galima perduoti skirtingą argumentų skaičių.

Dažniausi formato žymekliai

Dažni String.format() žymekliai
ŽymeklisReikšmėPavyzdys
%sTekstas arba objekto tekstinė išraiška"Rūta"
%dSveikasis dešimtainis skaičius42
%fSlankiojo kablelio skaičius3.500000
%bLoginė išraiškatrue
%cVienas simbolis'A'
%%Paprastas procento ženklas%
%nNauja eilutė pagal operacinę sistemąEilutės lūžis
Žymeklis turi tikti argumentui.

Pavyzdžiui, perdavus tekstą ten, kur šablonas tikisi %d, vykdymo metu įvyksta IllegalFormatConversionException.

Skaitmenų po kablelio skaičius

import java.util.Locale;

double kaina = 3.5;
String tekstas = String.format(Locale.US, "Kaina: %.2f Eur", kaina);

System.out.println(tekstas);
Konsolės rezultatas

Kaina: 3.50 Eur

Žymeklis %.2f reiškia slankiojo kablelio skaičių su dviem skaitmenimis po kablelio. Locale.US šiame mokomajame pavyzdyje aiškiai nustato tašką kaip dešimtainį skirtuką.

Locale gali pakeisti rezultatą.

Naudojant numatytą Lietuvos lokalę ta pati reikšmė gali būti rodoma kaip 3,50. Naudotojui skirtame tekste tai dažnai yra pageidaujama.

Plotis ir lygiavimas

String pirma = String.format("|%-10s|%4d|", "Duona", 2);
String antra = String.format("|%-10s|%4d|", "Obuoliai", 12);

System.out.println(pirma);
System.out.println(antra);
Konsolės rezultatas

|Duona     |   2|
|Obuoliai   |  12|

  • %-10s skiria tekstui dešimt pozicijų ir lygiuoja jį kairėje.
  • %4d skiria skaičiui keturias pozicijas ir lygiuoja jį dešinėje.
  • Vertikalūs brūkšniai nėra formato dalis – jie pridėti, kad būtų lengviau pamatyti laukų ribas.

Procento ženklas ir nauja eilutė

String tekstas = String.format("Nuolaida: 20%%%nLiko: %d vnt.", 4);

System.out.print(tekstas);
Konsolės rezultatas

Nuolaida: 20%
Liko: 4 vnt.

Kadangi vienas % pradeda formato žymeklį, paprastam procento ženklui rašoma %%. Žymeklis %n įterpia tai operacinei sistemai tinkamą naujos eilutės seką.

format() pats nieko nespausdina

String zinute = String.format("Labas, %s!", "Rūta");

// format() tik sukūrė tekstą; rodome jį atskirai
System.out.println(zinute);
Konsolės rezultatas

Labas, Rūta!

String.format() tik sukuria ir grąžina tekstą. Rezultatą galima išsaugoti, perduoti metodui, grąžinti iš metodo ar vėliau išspausdinti.

String.format() ir printf()

String tekstas = String.format("Kiekis: %d", 5);
System.out.println(tekstas);

System.out.printf("Kiekis: %d%n", 5);
Konsolės rezultatas

Kiekis: 5
Kiekis: 5

format() ir printf() skirtumas
MetodasElgesys
String.format()Grąžina naują String, bet jo nespausdina.
System.out.printf()Iš karto siunčia suformatuotą rezultatą į konsolę.

Dažnos klaidos

  • Žymeklių ir argumentų tvarka nesutampa.
  • Žymekliui perduodamas netinkamo tipo argumentas.
  • Pamirštama, kad format() grąžina rezultatą ir pats jo nerodo.
  • Procento ženklas parašomas kaip % vietoje %%.
  • Finansiniams skaičiavimams formatavimas naudojamas vietoje tikslaus skaičių tipo; formatavimas pakeičia vaizdą, o ne skaičiavimo tikslumą.