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.