Oblikovanje s printf () na Javi

1. Uvod

U ovom uputstvu demonstrirat ćemo različite primjere formatiranja pomoću printf ()metoda.

Metoda je dio java.io.PrintStream klase i pruža String oblikovanje slično kao printf () funkcija u C.

2. Sintaksa

Možemo se poslužiti jednim od sljedećih PrintStream metode formatiranja rezultata:

System.out.printf (format, argumenti); System.out.printf (lokalitet, format, argumenti);

Određujemo pravila oblikovanja pomoću format parametar. Pravila počinju s ‘%' lik.

Pogledajmo kratki primjer prije nego što uđemo u detalje različitih pravila oblikovanja:

System.out.printf ("Pozdrav% s!% N", "Svijet");

Ovo daje sljedeći izlaz:

Pozdrav svijete!

Kao što je gore prikazano, niz formatiranja sadrži običan tekst i dva pravila oblikovanja. Prvo pravilo koristi se za formatiranje argumenta niza. Drugo pravilo dodaje znak novog retka na kraj niza.

2.1. Pravila formata

Pogledajmo pobliže formatni niz. Sastoji se od literala i specifikatora formata. Specifikatori formata uključuju zastavice, širinu, preciznost i znakove pretvorbe u slijedećem slijedu:

% [zastavice] [širina] [. preciznost] znak pretvorbe

Specifikacije u zagradama nisu obvezne.

Interno, printf () koristi klasu java.util.Formatter za raščlanjivanje niza formata i generiranje rezultata. Dodatne opcije niza formata mogu se naći u programu Formatter Javadoc.

2.2. Znakovi pretvorbe

The pretvorbeni lik je potreban i određuje način oblikovanja argumenta. Znakovi pretvorbe vrijede samo za određene vrste podataka. Neke uobičajene su:

  • s - formatira nizove -
  • d - formatira decimalne cijele brojeve -
  • f - formatira brojeve s pomičnom zarezom
  • t- formatira vrijednosti datuma / vremena

Istražit ćemo ih i nekoliko drugih kasnije u članku.

2.3. Izborni modifikatori

The [zastave] definirati standardne načine za modificiranje rezultata a najčešći su za oblikovanje cijelih brojeva i brojeva s pomičnim zarezom.

[Širina] određuje širinu polja za izlaz argumenta. Predstavlja minimalni broj znakova upisanih u izlaz.

[.Preciznost] određuje broj znamenki preciznosti pri izlazu vrijednosti s pomičnom zarezom. Uz to, pomoću njega možemo definirati duljinu podniza za izdvajanje iz a Niz.

3. Razdjelnik linija

Da bismo niz razlomili u zasebne retke, imamo%n specifikator:

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

Isječak koda gore proizvest će sljedeći izlaz:

baeldung linijski završivač

The % n separator printf () automatski će umetnuti matični razdjelnik linija matičnog sustava.

4. Logičko oblikovanje

Za formatiranje logičkih vrijednosti koristimo % b format. Radi na sljedeći način: Ako je ulazna vrijednost pravi, izlaz je pravi. Inače, izlaz je lažno.

Dakle, ako to učinimo:

System.out.printf ("% b% n", null); System.out.printf ("% B% n", netačno); System.out.printf ("% B% n", 5.3); System.out.printf ("% b% n", "slučajni tekst");

Tada ćemo vidjeti:

false LAŽNA ISTINA true 

Primijetite da možemo koristiti % B za oblikovanje velikih slova.

5. Oblikovanje niza

Za formatiranje jednostavnog niza koristit ćemo % s kombinacija. Uz to, niz možemo napraviti velikim slovom:

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

A izlaz je:

'baeldung' 'BAELDUNG'

Također, da odredimo minimalnu duljinu, možemo odrediti a širina:

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

Što nam daje:

'baeldung'

Ako trebamo lijevo opravdati naš niz, tada možemo koristiti '- ‘zastava:

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

A izlaz je:

'baeldung'

Čak štoviše, možemo ograničiti broj znakova u našem izlazu navodeći a preciznost:

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

Prvi 'x' broj u % x.ys sintaksa je dodatak. 'Y' je broj znakova.

Za naš primjer ovdje, izlaz je bok.

6. Oblikovanje char

Rezultat % c je Unicode znak:

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

Veliko slovo C će velikim slovima napisati rezultat:

s S

Ali ako mu damo nevaljani argument, onda Formatter bacit će IllegalFormatConversionException.

7. Oblikovanje brojeva

7.1. Cjelobrojno oblikovanje

The printf () metoda prihvaća sve cijele brojeve dostupne u jeziku; byte, short, int, long i BigInteger ako koristimo % d:

System.out.printf ("jednostavni cijeli broj:% d% n", 10000L);

Uz pomoć "D" lik, imat ćemo:

jednostavan cijeli broj: 10000

U slučaju da trebamo za formatiranje broja pomoću separatora tisuća možemo koristiti ‘,'zastava. Također možemo formatirati rezultate za različite krajeve:

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

Kao što vidimo, oblikovanje u SAD-u drugačije je nego u Italiji:

10,000 10.000

7.2. Plutajuće i dvostruko oblikovanje

Da bismo formatirali plutajući broj, trebat će nam format 'f':

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

Koji će dati:

5.147300

Naravno, prvo što vam padne na pamet je kontrolirati preciznost:

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

Ovdje definiramo širina našeg broja kao 5, a duljina decimalnog dijela je 2:

' 5.15'

Ovdje imamo jedan razmak od početka broja koji podržava unaprijed definiranu širinu.

Da imamo svoj izlaz u znanstvenom zapisu samo koristimo 'E' znak pretvorbe:

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

Rezultat je sljedeći:

'5.15e + 00'

8. Oblikovanje datuma i vremena

Za oblikovanje datuma i vremena, niz pretvorbe je niz od dva znaka: 'T' ili "T" znak i sufiks pretvorbe. Istražimo najčešće primjere sufiksnih znakova za formatiranje vremena i datuma.

Definitivno, za naprednije formatiranje možemo koristiti DateTimeFormatter koja je dostupna od Jave 8.

8.1. Oblikovanje vremena

Prvo, pogledajmo popis nekih korisnih sufiksnih znakova za oblikovanje vremena:

  • „H“, „M“, „S“ - likovi su odgovorni za izdvajanje sati, minuta i sekunde iz ulaza Datum
  • „L“, „N“ - za predstavljanje vremena u milisekundama i nanosekundama
  • "P" - dodaje formatiranje am / pm
  • "Z" - ispisuje pomak vremenske zone

Recimo da smo htjeli ispisati vremenski dio a Datum:

Datum datuma = novi datum (); System.out.printf ("% tT% n", datum);

Gornji kod zajedno sa "% TT" kombinacija daje sljedeći izlaz:

13:51:15

U slučaju da nam treba detaljnije oblikovanje, možemo nazvati različite vremenske segmente:

System.out.printf ("sati% tH: minute% tM: sekunde% tS% n", datum, datum, datum);

Nakon korištenja "H", "M", i "S" dobivamo:

sati 13: minute 51: sekunde 15

Iako, popis datum više puta je bol. Alternativno, da bismo se riješili višestrukih argumenata, možemo upotrijebiti referencu indeksa našeg ulaznog parametra koji je 1$ u našem slučaju:

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

Ovdje kao izlaz želimo trenutno vrijeme, am / pm, vrijeme u milisekundama, nanosekundama i pomak vremenske zone:

13:51:15 pm 061 061000000 +0400

8.2. Oblikovanje datuma

Kao i oblikovanje vremena, za oblikovanje datuma imamo posebne znakove za oblikovanje:

  • "A" - ispisuje cijeli dan u tjednu
  • "D" - formatira dvoznamenkasti dan u mjesecu
  • "B" - je za puni mjesec
  • 'M' - formatira dvoznamenkasti mjesec
  • "Y" - izlazi godišnje u četiri znamenke
  • 'Y' - daje posljednje dvije znamenke godine

Dakle, ako smo željeli prikazati dan u tjednu, a slijedi mjesec:

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

Zatim pomoću "A", "B", i "Y", dobili bismo:

Četvrtak, studeni 2018

Da bi svi rezultati bili numerički, možemo zamijeniti 'A ',' B ',' Y "Slova s"d ',' m ',' y ':

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

Što će rezultirati:

22.11.18

9. Sažetak

U ovom smo članku razgovarali o tome kako koristiti PrintStream # printf metoda formatiranja izlaza. Pogledali smo različite obrasce formata koji se koriste za kontrolu izlaza za uobičajene tipove podataka.

Napokon, kao i uvijek, kod korišten tijekom rasprave možete pronaći na GitHubu.