Formázás Java-ban a printf () használatával

1. Bemutatkozás

Ebben az oktatóanyagban a formázással különböző példákat mutatunk be printf ()módszer.

A módszer a java.io.PrintStream osztály, és a printf () funkció C-ben.

2. Szintaxis

A következők egyikét használhatjuk PrintStream módszerek a kimenet formázására:

System.out.printf (formátum, argumentumok); System.out.printf (területi beállítás, formátum, argumentumok);

A formázási szabályokat a formátum paraméter. A szabályok a ‘%' karakter.

Nézzünk meg egy gyors példát, mielőtt elmélyülnénk a különféle formázási szabályok részleteiben:

System.out.printf ("Hello% s!% N", "Világ");

Ez a következő kimenetet eredményezi:

Helló Világ!

Amint a fentiekből látható, a formátum karakterlánc egyszerű szöveget és két formázási szabályt tartalmaz. Az első szabály a karakterlánc argumentum formázására szolgál. A második szabály új sor karaktert ad a karakterlánc végéhez.

2.1. Formátum szabályok

Nézzük meg alaposabban a formátum karakterláncát. Literálokból és formátummeghatározókból áll. A formátummeghatározók tartalmazzák a jelzőket, a szélességet, a pontosságot és az átalakító karaktereket a következő sorrendben:

% [flags] [width] [. precíziós] konverziós karakter

A zárójelben szereplő specifikációk nem kötelezőek.

Belsőleg, printf () a java.util.Formatter osztályt használja a formátum karakterláncának elemzésére és a kimenet előállítására. További formázási karakterlánc-beállítások megtalálhatók a Formatter Javadoc-ban.

2.2. Konvertáló karakterek

A konverziós karakter szükséges, és meghatározza az argumentum formázását. A konverziós karakterek csak bizonyos adattípusokra érvényesek. Néhány általános:

  • s - formázza a húrokat
  • d - formázza a tizedes egész számokat
  • f - formázza a lebegőpontos számokat
  • t- formázza a dátum / idő értékeket

Ezeket és még néhány mást később a cikkben tárunk fel.

2.3. Opcionális módosítók

A [zászlók] meghatározza a kimenet módosításának szokásos módjait és leggyakrabban egész számok és lebegőpontos számok formázására szolgálnak.

A szélesség] megadja az argumentum kimenetének mezőszélességét. A kimenetre írt karakterek minimális számát jelenti.

A [.pontosság] meghatározza a pontosság számjegyeinek számát lebegőpontos értékek kiadásakor. Ezenkívül meghatározhatjuk az a-ból kivonandó alszekció hosszát Húr.

3. Vonalelválasztó

A karakterlánc külön sorokra bontásához%n specifikáló:

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

A fenti kódrészlet a következő kimenetet hozza létre:

baeldung vonalvezeték

A % n szétválasztó printf () automatikusan beilleszti a gazda rendszer natív vonal elválasztóját.

4. Logikai formázás

A logikai értékek formázásához a % b formátum. A következő módon működik: Ha a bemeneti érték: igaz, a kimenet igaz. Ellenkező esetben a kimenet az hamis.

Tehát, ha megtesszük:

System.out.printf ("% b% n", null); System.out.printf ("% B% n", hamis); System.out.printf ("% B% n", 5,3); System.out.printf ("% b% n", "véletlenszerű szöveg");

Akkor meglátjuk:

hamis FALSE TRUE igaz 

Figyeljük meg, hogy használhatjuk % B nagybetűs formázáshoz.

5. Karaktersorozat formázása

Egy egyszerű karakterlánc formázásához a % s kombináció. Ezenkívül a karakterláncot nagybetűvé tehetjük:

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

És a kimenet:

„baeldung” „BAELDUNG”

A minimális hosszúság megadásához megadhatjuk a szélesség:

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

Ez ad nekünk:

„baeldung”

Ha balra kell igazolnunk a karakterláncunkat, akkor használhatjuk a- ‘zászló:

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

És a kimenet:

„baeldung”

Még inkább korlátozhatjuk a kimenetünkben a karakterek számát az a megadásával pontosság:

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

Az első 'x' szám be % x.ys a szintaxis a párnázás. „Y” a betűk száma.

Itt a példánkhoz a kimenet Szia.

6. Karakter formázás

Az eredménye % c egy Unicode karakter:

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

Nagybetű C nagybetűvel írja be az eredményt:

s S

De ha érvénytelen érvet adunk neki, akkor Formázó dobni fog IllegalFormatConversionException.

7. Szám formázása

7.1. Egész formázás

A printf () A metódus elfogadja a nyelv összes elérhető egész számát; bájt, rövid, int, hosszú és BigInteger ha használjuk % d:

System.out.printf ("egyszerű egész szám:% d% n", 10000L);

A segítségével „D” karakter, lesz:

egyszerű egész szám: 10000

Abban az esetben, ha szükségünk lenne rá számunk formázásához az ezres elválasztóval használhatjuk a ‘,'zászló. Eredményeinket különböző helyekre is formázhatjuk:

System.out.printf (Terület.US, "%, d% n", 10000); System.out.printf (Nyelv.ITALY, "%, d% n", 10000);

Mint látjuk, az Egyesült Államokban más a formázás, mint Olaszországban:

10,000 10.000

7.2. Úszó és dupla formázás

Úszó szám formázásához szükségünk lesz az „f” formátumra:

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

Melyik eredmény:

5.147300

Természetesen az első dolog, ami eszembe jut, a pontosság:

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

Itt definiáljuk a szélesség számunk as 5, és a tizedes rész hossza 2:

' 5.15'

Itt van egy szóköz a szám elejétől az előre meghatározott szélesség támogatásához.

Hogy legyen kimenetünk tudományos jelölésekben csak a „E” konverziós karakter:

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

Az eredmény pedig a következő:

„5.15e + 00”

8. Dátum és idő formázása

A dátum és idő formázásához az átalakító karakterlánc két karakterből álló sorozat: a „T” vagy „T” karakter és az átalakító utótag. Fedezzük fel a példákkal a leggyakoribb idő- és dátumformázó utótagokat.

Mindenképpen a fejlettebb formázáshoz használhatjuk DateTimeFormatter amely Java 8 óta elérhető.

8.1. Idő formázása

Először nézzük meg az időformázás néhány hasznos utótagját:

  • „H”, „M”, „S” - a karakterek felelősek az órák, percek és másodpercek kivonásáért a bemenetből Dátum
  • „L”, „N” - ennek megfelelően ábrázolni az időt milliszekundumban és nanoszekundumban
  • „P” - hozzáteszi az am / pm formázást
  • „Z” - kinyomtatja az időzóna eltolást

Tegyük fel, hogy ki akartuk nyomtatni a Dátum:

Dátum dátum = új dátum (); System.out.printf ("% tT% n", dátum);

A fenti kód és a „% TT” kombinációja a következő kimenetet eredményezi:

13:51:15

Ha részletesebb formázásra van szükségünk, akkor különböző időszegmenseket hívhatunk meg:

System.out.printf ("óra% tH: perc% tM: másodperc% tS% n", dátum, dátum, dátum);

Miután használta „H”, „M”, és „S” kapunk:

óra 13: perc 51: másodperc 15

Pedig felsorolás dátum többször is fájdalom. Alternatív megoldásként több argumentumtól való megszabaduláshoz használhatjuk a bemeneti paraméterünk index hivatkozását, amely az 1$ a mi esetünkben:

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

Itt kimenetként szeretnénk az aktuális időt, am / pm, időt milliszekundumban, nanoszekundumban és az időzóna eltolást:

13:51:15 061 061000000 +0400

8.2. Dátum formázása

Az idő formázásához hasonlóan a dátum formázásához is vannak speciális formázó karaktereink:

  • „A” - kinyomtatja a hét teljes napját
  • „D” - a hónap kétjegyű napját formázza
  • „B” - a teljes havi névre vonatkozik
  • „M” - kétjegyű hónapot formáz
  • „Y” - évente négy számjegyből áll
  • „Y” - az év utolsó két számjegyét adja ki

Tehát, ha meg akarjuk mutatni a hét napját, majd a hónapot:

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

Ezután használja „A”, „B”, és „Y”, kapnánk:

2018. november, csütörtök

Ahhoz, hogy eredményeink numerikus formában jelenjenek meg, kicserélhetjük aA ”,„ B ”,„ Y ’Betűk’d ',' m ',' y ':

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

Ennek eredményeként:

22.11.18

9. Összegzés

Ebben a cikkben megvitattuk a PrintStream # printf módszer a kimenet formázására. Megvizsgáltuk a kimenet vezérléséhez használt különböző formátummintákat a szokásos adattípusok esetében.

Végül, mint mindig, a vita során használt kód megtalálható a GitHubon.