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.