Formatering med printf () i Java

1. Introduktion

I denne vejledning demonstrerer vi forskellige eksempler på formatering med printf ()metode.

Metoden er en del af java.io.PrintStream klasse og giver strengformatering svarende til printf () funktion i C.

2. Syntaks

Vi kan bruge et af følgende PrintStream metoder til at formatere output:

System.out.printf (format, argumenter); System.out.printf (landestandard, format, argumenter);

Vi specificerer formateringsreglerne ved hjælp af format parameter. Regler starter med ‘%' Karakter.

Lad os se på et hurtigt eksempel, inden vi dykker ned i detaljerne i de forskellige formateringsregler:

System.out.printf ("Hej% s!% N", "Verden");

Dette giver følgende output:

Hej Verden!

Som vist ovenfor indeholder formatstrengen almindelig tekst og to formateringsregler. Den første regel bruges til at formatere strengargumentet. Den anden regel tilføjer et nyt linjetegn til slutningen af ​​strengen.

2.1. Formatregler

Lad os se nærmere på formatstrengen. Den består af bogstaver og formatspecifikationer. Formatspecifikatorer inkluderer flag, bredde, præcision og konverteringstegn i følgende rækkefølge:

% [flag] [bredde] [. præcision] konverteringstegn

Specifikatorer i parenteserne er valgfri.

Internt, printf () bruger klassen java.util.Formatter til at analysere formatstrengen og generere output. Yderligere formatstrengmuligheder kan findes i Formatter Javadoc.

2.2. Konverteringstegn

Det konvertering-karakter kræves og bestemmer, hvordan argumentet formateres. Konverteringstegn er kun gyldige for visse datatyper. Nogle almindelige er:

  • s - formaterer strenge
  • d - formaterer decimaltal
  • f - formaterer flydende numre
  • t- formaterer dato- / tidsværdier

Vi udforsker disse og et par andre senere i artiklen.

2.3. Valgfrie modifikatorer

Det [flag] definer standardmetoder til at ændre output og er mest almindelige for formatering af heltal og flydende tal.

[Bredde] angiver feltbredden til udsendelse af argumentet. Det repræsenterer det mindste antal tegn, der er skrevet til output.

[.Præcisionen] angiver antallet af præcisionscifre ved udskrivning af flydende punktværdier. Derudover kan vi bruge det til at definere længden af ​​et substrat, der skal ekstraheres fra en Snor.

3. Linjeseparator

For at bryde strengen i separate linjer har vi en%n specifikator:

System.out.printf ("baeldung% nline% nterminator");

Kodestykket ovenfor producerer følgende output:

baeldung line terminator

Det % n separator printf () vil automatisk indsætte værtssystemets oprindelige linjeseparator.

4. Boolsk formatering

For at formatere boolske værdier bruger vi % b format. Det fungerer på følgende måde: Hvis inputværdien er rigtigt, output er rigtigt. Ellers er output falsk.

Så hvis vi gør det:

System.out.printf ("% b% n", null); System.out.printf ("% B% n", falsk); System.out.printf ("% B% n", 5.3); System.out.printf ("% b% n", "tilfældig tekst");

Så får vi se:

falsk FALSK SAND sandt 

Bemærk, at vi kan bruge % B til store bogstaver.

5. Strengformatering

For at formatere en simpel streng bruger vi % s kombination. Derudover kan vi gøre strengen stor:

printf ("'% s'% n", "baeldung"); printf ("'% S'% n", "baeldung");

Og output er:

'baeldung' 'BAELDUNG'

For at specificere en minimumslængde kan vi også angive en bredde:

printf ("'% 15s'% n", "baeldung");

Hvilket giver os:

'baeldung'

Hvis vi har brug for at venstrejustere vores streng, kan vi bruge '- ‘flag:

printf ("'% - 10s'% n", "baeldung");

Og output er:

'baeldung'

Endnu mere kan vi begrænse antallet af tegn i vores output ved at angive en præcision:

System.out.printf ("% 2.2s", "Hej der!");

Den første 'x' nummer i % x.ys syntaks er polstringen. 'Y' er antallet af tegn.

For vores eksempel her er output Hej.

6. Char-formatering

Resultatet af % c er en Unicode-karakter:

System.out.printf ("% c% n", 's'); System.out.printf ("% C% n", 's');

Store bogstaver C vil store bogstaver i resultatet:

s S

Men hvis vi giver det et ugyldigt argument, så Formater vil kaste IllegalFormatConversionException.

7. Nummerformatering

7.1. Heltalsformatering

Det printf () metoden accepterer alle tilgængelige heltal på sproget; byte, kort, int, lang og BigInteger hvis vi bruger % d:

System.out.printf ("simpelt heltal:% d% n", 10000L);

Ved hjælp af 'D' karakter, vi får:

simpelt heltal: 10000

Hvis vi har brug for det for at formatere vores nummer med separatoren tusinder, kan vi bruge ‘,'flag. Og vi kan også formatere vores resultater til forskellige lokaliteter:

System.out.printf (Locale.US, "%, d% n", 10000); System.out.printf (Locale.ITALY, "%, d% n", 10000);

Som vi ser, er formateringen i USA anderledes end i Italien:

10,000 10.000

7.2. Flyd og dobbelt formatering

For at formatere et float-nummer skal vi bruge 'f' -formatet:

System.out.printf ("% f% n", 5.1473);

Hvilket vil output:

5.147300

Selvfølgelig er det første, der kommer til at tænke på, at kontrollere præcision:

System.out.printf ("'% 5.2f'% n", 5.1473);

Her definerer vi bredde af vores antal som 5, og længden af ​​decimaldelen er 2:

' 5.15'

Her har vi et mellemrumsstop fra begyndelsen af ​​nummeret for at understøtte den foruddefinerede bredde.

At have vores output i videnskabelig notation bruger vi bare 'E' konverteringskarakter:

System.out.printf ("'% 5.2e'% n", 5.1473);

Og resultatet er følgende:

'5.15e + 00'

8. Dato- og tidsformatering

For dato- og tidsformatering, konverteringsstrengen er en sekvens på to tegn: 'T' eller 'T' karakter og konverteringssuffikset. Lad os udforske de mest almindelige tids- og datoformatering af suffikstegn med eksemplerne.

Absolut til mere avanceret formatering kan vi bruge DateTimeFormatter som har været tilgængelig siden Java 8.

8.1. Tidsformatering

Lad os først se listen over nogle nyttige suffikstegn til tidsformatering:

  • 'H', 'M', 'S' - tegn er ansvarlige for at udtrække timer, minutter og sekund fra input Dato
  • 'L', 'N' - at repræsentere tiden i millisekunder og nanosekunder i overensstemmelse hermed
  • 'P' - tilføjer am / pm formatering
  • 'Z' - udskriver tidszoneforskydningen

Lad os nu sige, at vi ønskede at udskrive tidsdelen af ​​a Dato:

Dato dato = ny dato (); System.out.printf ("% tT% n", dato);

Koden ovenfor sammen med '% TT' kombination giver følgende output:

13:51:15

Hvis vi har brug for mere detaljeret formatering, kan vi kalde på forskellige tidssegmenter:

System.out.printf ("timer% tH: minutter% tM: sekunder% tS% n", dato, dato, dato);

Efter at have brugt 'H', 'M'og 'S' vi får:

timer 13: minutter 51: sekunder 15

Skønt, notering dato flere gange er en smerte. Alternativt for at slippe af med flere argumenter kan vi bruge indeksreferencen for vores inputparameter, som er 1$ i vores tilfælde:

System.out.printf ("% 1 $ tH:% 1 $ tM:% 1 $ tS% 1 $ tp% 1 $ tL% 1 $ tN% 1 $ tz% n", dato);

Her ønsker vi som output den aktuelle tid, am / pm, tid i millisekunder, nanosekunder og tidszone-offset:

13:51:15 pm 061 061000000 +0400

8.2. Datoformatering

Ligesom tidsformatering har vi specielle formateringstegn til datoformatering:

  • 'EN' - udskriver hele ugens dag
  • 'D' - formaterer en tocifret dag i måneden
  • 'B' - er for hele månedsnavnet
  • 'M' - formaterer en tocifret måned
  • 'Y' - output hvert år i fire cifre
  • 'Y' - udsender de sidste to cifre i året

Så hvis vi ville vise ugedagen efterfulgt af måneden:

System.out.printf ("% 1 $ tA,% 1 $ tB% 1 $ tY% n", dato);

Brug derefter 'EN', 'B'og 'Y', vi får:

Torsdag, november 2018

For at få vores resultater alle i numerisk format kan vi erstatte 'A ',' B ',' Y 'Bogstaver med'd ',' m ',' y ':

System.out.printf ("% 1 $ td.% 1 $ tm.% 1 $ ty% n", dato);

Hvilket vil resultere i:

22.11.18

9. Resume

I denne artikel diskuterede vi, hvordan du bruger PrintStream # printf metode til at formatere output. Vi kiggede på de forskellige formatmønstre, der bruges til at kontrollere output for almindelige datatyper.

Endelig, som altid, kan koden, der blev brugt under diskussionen, findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found