Formátovanie pomocou printf () v Jave

1. Úvod

V tomto výučbe si ukážeme rôzne príklady formátovania pomocou printf ()metóda.

Metóda je súčasťou java.io.PrintStream triedy a poskytuje formátovanie reťazcov podobné formátu printf () funkcia v C.

2. Syntax

Môžeme použiť jednu z nasledujúcich možností PrintStream spôsoby formátovania výstupu:

System.out.printf (formát, argumenty); System.out.printf (miestne nastavenie, formát, argumenty);

Pravidlá formátovania určujeme pomocou formát parameter. Pravidlá začínajú s ‘%' znak.

Pozrime sa na krátky príklad predtým, ako sa ponoríme do podrobností o rôznych pravidlách formátovania:

System.out.printf ("Ahoj% s!% N", "Svet");

Týmto sa vytvorí nasledujúci výstup:

Ahoj Svet!

Ako je uvedené vyššie, formátovací reťazec obsahuje obyčajný text a dve pravidlá formátovania. Prvé pravidlo sa používa na formátovanie reťazcového argumentu. Druhé pravidlo pridáva na koniec reťazca znak nového riadku.

2.1. Pravidlá formátovania

Poďme sa bližšie pozrieť na formátovací reťazec. Skladá sa z literálov a špecifikátorov formátu. Špecifikátory formátu zahŕňajú znaky, šírku, presnosť a znaky prevodu v nasledujúcom poradí:

% [vlajky] [šírka] [. presnosť] konverzný znak

Špecifikátory v zátvorkách sú voliteľné.

Interne, printf () používa triedu java.util.Formatter na analýzu formátovacieho reťazca a vygenerovanie výstupu. Ďalšie možnosti formátovacích reťazcov nájdete vo formáte Javadoc formátovača.

2.2. Konverzné znaky

The konverzný znak je požadované a určuje, ako je formátovaný argument. Konverzné znaky sú platné iba pre určité typy údajov. Niektoré bežné sú:

  • s - formátuje reťazce
  • d - formáty desatinných celých čísel
  • f - formátuje čísla s pohyblivou rádovou čiarkou
  • t- formátuje hodnoty dátumu a času

Budeme ich skúmať a niekoľko ďalších ďalej v článku.

2.3. Voliteľné modifikátory

The [vlajky] definovať štandardné spôsoby úpravy výstupu a sú najbežnejšie na formátovanie celých čísel a čísel s pohyblivou rádovou čiarkou.

[Šírka] určuje šírku poľa pre výstup argumentu. Predstavuje minimálny počet znakov zapísaných na výstup.

[.Presnosť] určuje počet číslic presnosti pri výstupe s pohyblivou rádovou čiarkou. Ďalej ho môžeme použiť na definovanie dĺžky podreťazca, ktorý sa má extrahovať z a String.

3. Oddeľovač riadkov

Ak chceme reťazec rozdeliť na samostatné riadky, máme%n špecifikátor:

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

Fragment kódu vyššie vyprodukuje nasledujúci výstup:

zakončovač linky baeldung

The % n oddeľovač printf () automaticky vloží oddeľovač natívnych riadkov hostiteľského systému.

4. Boolovské formátovanie

Na formátovanie boolovských hodnôt používame % b formát. Funguje to nasledujúcim spôsobom: Ak je vstupná hodnota pravda, výstup je pravda. Inak je výstup nepravdivé.

Takže ak to urobíme:

System.out.printf ("% b% n", null); System.out.printf ("% B% n", false); System.out.printf ("% B% n", 5,3); System.out.printf ("% b% n", "náhodný text");

Potom uvidíme:

false FALSE TRUE pravda 

Všimnite si, že môžeme použiť % B pre veľké formátovanie.

5. Formátovanie reťazcov

Na formátovanie jednoduchého reťazca použijeme % s kombinácia. Ďalej môžeme vytvoriť reťazec veľkým písmenom:

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

A výstup je:

„baeldung“ „BAELDUNG“

Aby sme určili minimálnu dĺžku, môžeme určiť a šírka:

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

Čo nám dáva:

„baeldung“

Ak potrebujeme reťazec zarovnať doľava, môžeme použiť ‘- „vlajka:

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

A výstup je:

„baeldung“

Ešte viac môžeme obmedziť počet znakov v našom výstupe zadaním a presnosť:

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

Prvý 'X' číslo v % x.ys syntax je polstrovanie. „Y“ je počet znakov.

Pre náš príklad tu je výstup Ahoj.

6. Formátovanie znaku

Výsledok % c je znak Unicode:

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

Veľké písmeno C. zväčší výsledok:

s S

Ale ak dáme neplatný argument, potom Formátovač bude hádzať IllegalFormatConversionException.

7. Formátovanie čísla

7.1. Formátovanie celého čísla

The printf () metóda akceptuje všetky celé čísla dostupné v jazyku; byte, short, int, long a BigInteger ak použijeme % d:

System.out.printf ("jednoduché celé číslo:% d% n", 10 000L);

S pomocou ‘D’ postava, budeme mať:

jednoduché celé číslo: 10 000

Pre prípad potreby na naformátovanie nášho čísla pomocou oddeľovača tisícov môžeme použiť ‘,'vlajka. Naše výsledky môžeme tiež formátovať pre rôzne miestne nastavenia:

System.out.printf (Locale.US, "%, d% n", 10 000); System.out.printf (miestne nastavenie.ITALY, "%, d% n", 10 000);

Ako vidíme, formátovanie v USA je iné ako v Taliansku:

10,000 10.000

7.2. Plávajúce a dvojité formátovanie

Na naformátovanie floatového čísla budeme potrebovať formát „f“:

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

Ktorý bude výstup:

5.147300

Prvá vec, ktorá mi samozrejme príde na myseľ, je samozrejme kontrola presnosť:

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

Tu definujeme šírka z nášho počtu ako 5a dĺžka desatinnej časti je 2:

' 5.15'

Tu máme od začiatku čísla jednu medzeru na podporu preddefinovanej šírky.

Aby sme mali náš výstup vo vedeckom zápise používame iba znak „E“ konverzný znak:

System.out.printf ("'% 5,2e'% n", 5,1473);

A výsledok je nasledovný:

„5,15 e + 00“

8. Formátovanie dátumu a času

Pre formátovanie dátumu a času konverzný reťazec je sekvencia dvoch znakov: Nie alebo „T“ znak a konverzná prípona. Pozrime sa na príklady najbežnejších znakov prípony na formátovanie času a dátumu.

Pre pokročilejšie formátovanie určite môžeme použiť DateTimeFormatter ktorý je k dispozícii od Javy 8.

8.1. Formátovanie času

Najprv si pozrime zoznam niektorých užitočných znakov prípon pre formátovanie času:

  • „H“, „M“, „S“ - postavy sú zodpovedné za vyťaženie hodín, minút a sekúnd zo vstupu Dátum
  • „L“, „N“ - zodpovedajúcim spôsobom reprezentovať čas v milisekundách a nanosekundách
  • „P“ - pridáva formátovanie am / pm
  • „Z“ - vypíše posunutie časovej zóny

Teraz, povedzme, že sme chceli vytlačiť časovú časť a Dátum:

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

Vyššie uvedený kód spolu s „% TT“ kombinácia produkuje nasledujúci výstup:

13:51:15

V prípade, že potrebujeme podrobnejšie formátovanie, môžeme volať pre rôzne časové segmenty:

System.out.printf ("hodiny% tH: minúty% tM: sekundy% tS% n", dátum, dátum, dátum);

Po použití „H“, „M“a „S“ dostaneme:

hodiny 13: minúty 51: sekundy 15

Aj keď, výpis dátum viackrát je bolesť. Prípadne aby sme sa zbavili viacerých argumentov, môžeme použiť indexovú referenciu nášho vstupného parametra, ktorý je 1$ v našom prípade:

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

Tu chceme ako výstup aktuálny čas, am / pm, čas v milisekundách, nanosekundách a posun časového pásma:

13:51:15 061 061000000 +0400

8.2. Formátovanie dátumu

Rovnako ako formátovanie času, aj tu máme špeciálne formátovacie znaky pre formátovanie dátumu:

  • „A“ - vytlačí celý deň v týždni
  • ‘D’ - formátuje dvojciferný deň v mesiaci
  • „B“ - je názov celého mesiaca
  • „M“ - formátuje dvojciferný mesiac
  • „Y“ - výstupy ročne v štyroch čísliciach
  • „Y“ - zobrazí posledné dve číslice roku

Pokiaľ by sme teda chceli ukázať deň v týždni, nasledovaný mesiacom:

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

Potom pomocou „A“, „B“a „Y“, dostali by sme:

Štvrtok, november 2018

Ak chcete, aby boli všetky naše výsledky v číselnom formáte, môžeme nahradiť znak „A ',' B ',' Y „Písmená s“d ', „m“, „y“:

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

Výsledkom bude:

22.11.18

9. Zhrnutie

V tomto článku sme diskutovali o tom, ako používať PrintStream # printf metóda na formátovanie výstupu. Pozreli sme sa na rôzne vzory formátov, ktoré sa používajú na riadenie výstupu pre bežné dátové typy.

Nakoniec, ako vždy, kód použitý počas diskusie nájdete na GitHub.


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