Formatteren met printf () in Java

1. Inleiding

In deze zelfstudie demonstreren we verschillende voorbeelden van opmaak met de printf ()methode.

De methode maakt deel uit van de java.io.PrintStream class en biedt String-opmaak vergelijkbaar met de printf () functie in C.

2. Syntaxis

We kunnen een van de volgende gebruiken PrintStream methoden om de uitvoer te formatteren:

System.out.printf (formaat, argumenten); System.out.printf (locale, formaat, argumenten);

We specificeren de opmaakregels met behulp van de formaat parameter. Regels beginnen met de ‘%' karakter.

Laten we naar een snel voorbeeld kijken voordat we ingaan op de details van de verschillende opmaakregels:

System.out.printf ("Hallo% s!% N", "Wereld");

Dit levert de volgende output op:

Hallo Wereld!

Zoals hierboven getoond, bevat de opmaakreeks platte tekst en twee opmaakregels. De eerste regel wordt gebruikt om het stringargument op te maken. De tweede regel voegt een teken voor een nieuwe regel toe aan het einde van de tekenreeks.

2.1. Formaatregels

Laten we de format string eens nader bekijken. Het bestaat uit letterlijke en formaatspecificaties. Formaatspecificaties omvatten vlaggen, breedte, precisie en conversietekens in de volgende volgorde:

% [vlaggen] [breedte] [. precisie] conversieteken

Specificatie tussen haakjes is optioneel.

Intern, printf () gebruikt de klasse java.util.Formatter om de format string te ontleden en de output te genereren. Extra opties voor opmaakreeksen zijn te vinden in de Formatter Javadoc.

2.2. Conversietekens

De conversie-karakter is vereist en bepaalt hoe het argument wordt opgemaakt. Conversietekens zijn alleen geldig voor bepaalde gegevenstypen. Enkele veel voorkomende zijn:

  • s - formatteert strings
  • d - maakt decimale gehele getallen op
  • f - formatteert de drijvende-kommagetallen
  • t- formatteert datum- / tijdwaarden

We zullen deze en een paar andere later in het artikel onderzoeken.

2.3. Optionele modificatoren

De [vlaggen] definieer standaard manieren om de output te wijzigen en worden het meest gebruikt voor het opmaken van gehele getallen en getallen met drijvende komma.

De breedte] specificeert de veldbreedte voor het uitvoeren van het argument. Het vertegenwoordigt het minimumaantal tekens dat naar de uitvoer wordt geschreven.

De [.precisie] specificeert het aantal cijfers van precisie bij het uitvoeren van drijvende-kommawaarden. Bovendien kunnen we het gebruiken om de lengte van een subtekenreeks te definiëren om uit een Draad.

3. Lijnscheiding

Om de string in afzonderlijke regels te breken, hebben we een%n specificeerder:

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

Het bovenstaande codefragment levert de volgende uitvoer op:

baeldung lijn terminator

De % n scheidingsteken printf () zal automatisch de native line separator van het hostsysteem invoegen.

4. Booleaanse opmaak

Om booleaanse waarden op te maken, gebruiken we de % b formaat. Het werkt op de volgende manier: Als de invoerwaarde is waar, de output is waar. Anders is de output false.

Dus als we dat doen:

System.out.printf ("% b% n", null); System.out.printf ("% B% n", false); System.out.printf ("% B% n", 5.3); System.out.printf ("% b% n", "willekeurige tekst");

Dan zullen we zien:

false FALSE TRUE waar 

Merk op dat we kunnen gebruiken % B voor het opmaken van hoofdletters.

5. Tekenreeksopmaak

Om een ​​eenvoudige string op te maken, gebruiken we de % s combinatie. Bovendien kunnen we de tekenreeks in hoofdletters zetten:

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

En de output is:

'baeldung''BAELDUNG'

Om een ​​minimale lengte op te geven, kunnen we ook een breedte:

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

Dat geeft ons:

'baeldung'

Als we onze string links moeten uitvullen, kunnen we de ‘- ‘vlag:

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

En de output is:

'baeldung'

Sterker nog, we kunnen het aantal tekens in onze uitvoer beperken door een precisie:

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

De eerste 'X' nummer in % x.ys syntaxis is de opvulling. ‘Y ' is het aantal tekens.

Voor ons voorbeeld hier is de uitvoer Hoi.

6. Tekenopmaak

Het resultaat van % c is een Unicode-teken:

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

De hoofdletter C zal het resultaat hoofdletters geven:

s S

Maar als we het een ongeldig argument geven, dan Formatter zal gooien IllegalFormatConversionException.

7. Nummeropmaak

7.1. Integer-opmaak

De printf () methode accepteert alle gehele getallen die beschikbaar zijn in de taal; byte, short, int, long en BigInteger als we gebruiken % d:

System.out.printf ("eenvoudig geheel getal:% d% n", 10000L);

Met behulp van de ‘D ' karakter, we hebben:

eenvoudig geheel getal: 10000

Voor het geval we dat nodig hebben om ons nummer op te maken met het scheidingsteken voor duizendtallen, kunnen we de ‘,'vlag. En we kunnen onze resultaten ook opmaken voor verschillende landinstellingen:

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

Zoals we zien, is de opmaak in de VS anders dan in Italië:

10,000 10.000

7.2. Zwevende en dubbele opmaak

Om een ​​float-getal op te maken, hebben we het ‘f'-formaat nodig:

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

Wat zal opleveren:

5.147300

Het eerste dat in je opkomt, is natuurlijk de controle van de precisie:

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

Hier definiëren we de breedte van ons nummer als 5, en de lengte van het decimale deel is 2:

' 5.15'

Hier hebben we een spatie-opvulling vanaf het begin van het nummer om de vooraf gedefinieerde breedte te ondersteunen.

Om onze output te hebben in wetenschappelijke notatie gebruiken we gewoon de 'E'-conversieteken:

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

En het resultaat is het volgende:

'5.15e + 00'

8. Datum- en tijdnotatie

Voor het formatteren van datum en tijd, de conversietekenreeks is een reeks van twee tekens: de 'T' of ‘T ' karakter en het conversie-achtervoegsel. Laten we de meest voorkomende achtervoegsels voor tijd- en datumopmaak bekijken met de voorbeelden.

Absoluut, voor meer geavanceerde opmaak kunnen we gebruiken DateTimeFormatter die beschikbaar is sinds Java 8.

8.1. Tijdopmaak

Laten we eerst eens kijken naar de lijst met enkele nuttige achtervoegsels voor tijdopmaak:

  • ‘H ',‘ M', ‘S ' - karakters zijn verantwoordelijk voor het extraheren van de uren, minuten en seconden van de ingang Datum
  • ‘L ',‘ N' - om de tijd in milliseconden en nanoseconden dienovereenkomstig weer te geven
  • ‘P ' - voegt am / pm-opmaak toe
  • ‘Z ' - drukt de tijdzone-offset af

Laten we nu zeggen dat we het tijdgedeelte van een Datum:

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

De bovenstaande code samen met ‘% TT ' combinatie levert de volgende output op:

13:51:15

Als we meer gedetailleerde opmaak nodig hebben, kunnen we verschillende tijdsegmenten aanroepen:

System.out.printf ("uren% tH: minuten% tM: seconden% tS% n", datum, datum, datum);

Hebben gebruikt ‘H ', 'M', en ‘S ' we krijgen:

uur 13: minuten 51: seconden 15

Hoewel, opsomming datum meerdere keren is lastig. Alternatief, om meerdere argumenten te verwijderen, kunnen we de indexreferentie van onze invoerparameter gebruiken, namelijk 1$ in ons geval:

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

Hier willen we als uitvoer de huidige tijd, am / pm, tijd in milliseconden, nanoseconden en de tijdzoneverschuiving:

13:51:15 uur 061 061000000 +0400

8.2. Datumopmaak

Net als tijdopmaak hebben we speciale opmaaktekens voor datumnotatie:

  • 'EEN' - drukt de volledige dag van de week af
  • ‘D ' - maakt een tweecijferige dag van de maand op
  • ‘B ' - is voor de volledige maandnaam
  • 'M' - maakt een tweecijferige maand op
  • ‘Y ' - geeft een jaar uit in vier cijfers
  • ‘Y ' - geeft de laatste twee cijfers van het jaar weer

Dus als we de dag van de week willen laten zien, gevolgd door de maand:

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

Gebruik dan 'EEN', ‘B ', en ‘Y ', we zouden krijgen:

Donderdag november 2018

Om onze resultaten allemaal in numeriek formaat te hebben, kunnen we de ‘A ', ‘B',‘ Y ‘Letters met‘d ',' m ',' y ':

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

Wat resulteert in:

22.11.18

9. Samenvatting

In dit artikel hebben we besproken hoe u de PrintStream # printf methode om de uitvoer te formatteren. We hebben gekeken naar de verschillende formaatpatronen die worden gebruikt om de uitvoer voor veelgebruikte gegevenstypen te besturen.

Eindelijk, zoals altijd, is de code die tijdens de discussie is gebruikt, te vinden op GitHub.


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