Java String -formatering

Java String -formatering
Formatering av en streng, lar andre tegn, understrenger eller numeriske verdier settes inn i en hovedstreng, på en bestemt måte. Tenk på koden: Streng Str = String.Format ("Det er %s, %s, %s og %s."," oransje "," banan "," pære "," sitron ");
System.ute.println (str);

Utgangen er:

Det er appelsin, banan, pære og sitron.

Det er fem argumenter i denne statiske format () -metoden i strengklassen. Det første argumentet er hovedstrengen med interesse, hvis innhold har fire plassholdere, som hver er %s. Sammen blir resten av argumentene referert til som en argumentliste. Alt som er likt, tilsvarer det første argumentet i argumentlisten den første plassholderen i hovedstrengen (fra venstre). Det andre argumentet på listen tilsvarer den andre plassholderen i hovedstrengen. Det tredje argumentet i argumentlisten tilsvarer den tredje plassholderen i hovedstrengen, og så videre. Ved utgangen erstattes plassholderne av deres tilsvarende argumenter på en forhåndsbestemt måte fra argumentlisten.

Fem argumenter blir vurdert her. Den aller første er ikke en del av den vurderte argumentlisten. Det kalles faktisk formatstrengen, selv om den fremdeles skal formateres. Det er alltid en streng. Resten av argumentene, som danner argumentlisten, kan være av forskjellige typer, ikke nødvendigvis, strenger. Merk: En plassholder her kalles formatspesifikasjon.

Alle argumentene ovenfor kan erstattes med variabler, som følgende kodesegment viser:

String a = "oransje", b = "banan", c = "pære", d = "sitron";
String fmtstr = "Det er %s, %s, %s og %s.";
String str = streng.format (fmtstr, a, b, c, d);
System.ute.println (str);

Denne artikkelen forklarer det grunnleggende om å formatere en streng i Java ved hjelp av formatspesifikasjoner.

Format Specifier Syntax

Syntaks for formatspesifikasjonen er:

%[Argument_index $] [Flags] [Bredde] [.presisjon] konvertering

Det må begynne med prosentvis skilt, %. Det må ende med en karakter som kalles konverteringen. I koden ovenfor består hver spesifikasjon av % og 'S'. 'S' er konverteringen. 'S står for streng. Resten av parametrene, angitt i firkantede parenteser i syntaks, er valgfritt og er forklart nedenfor.

Argument_index $
Argument_index er et desimaltall. Det begynner fra 1. Det kan være 1 $, 2 $, 3 $, etc. De normale korrespondansene for spesifikasjonene og argumentene i argumentlisten er som følger: den første spesifikasjonen til venstre, i formatstrengen, tilsvarer det første argumentet i argumentlisten (fra venstre); Den andre spesifikasjonen fra venstre, i formatstrengen, tilsvarer det andre argumentet i argumentlisten; Den tredje spesifikasjonen fra venstre, i formatstrengen, tilsvarer det tredje argumentet i argumentlisten; og så videre. argument_index kan brukes til å endre denne ordren. Følgende kodesegment reverserer ordren:

String str = streng.Format ("Her: %4 $ C, %3 $ C, %2 $ C og %1 $ C", '1', '2', '3', '4');
System.ute.println (str);

Utgangen er:

Her: 4, 3, 2 og 1

'C' i en spesifikasjon tilsvarer et tegn i argumentlisten. Normal ordre er 1 $, 2 $, 3 $, 4 $. Siden denne ordren ble omgjort i formatstrengen, så kom utgangen ut i omvendt rekkefølge.

Omdannelse

Konvertering i strengformatering er et spesielt tegn. Hvert formatspesifikasjon, med sin konvertering, tilsvarer et argument i argumentlisten. En konvertering er en karakter. Følgende tabell gir konverteringer og deres betydninger:

Konvertering av tegn og deres betydninger
Omdannelse Betydning
b For å formatere et argument som er boolsk
c For å formatere et argument som er en unicode -karakter
s For å formatere et argument som er en streng
d For å formatere et argument som er et desimaltall
f For å formatere et argument som er et tall med et desimalpunkt
% For å skrive ut bare % for argumentet, ' %'
n For å få resten av teksten til høyre for å gå på neste linje ved utgangen

Bruken av 'S' og 'C' er illustrert ovenfor. Resten av konvertering av metakaraktører vil bli illustrert i denne delen.

B -konverteringskarakteren
Følgende kodesegment viser hvordan en formatspesifikasjon for en bool erstattes av den boolske verdien av det tilsvarende argumentet:

String str = streng.Format ("Det er %B som han passerte.", sant);
System.ute.println (str);

Utgangen er:

Det er sant at han passerte.

Legg merke til at argumentet, sant, ikke er i sitater.

D -konverteringskarakteren
Følgende kodesegment viser hvordan en formatspesifikasjon for et desimaltall erstattes av verdien av det tilsvarende argumentet:

String str = streng.Format ("Jeg har %D -penner.", 5);
System.ute.println (str);

Utgangen er:

Jeg har 5 penner.

Legg merke til at argumentet, 5, ikke er i sitater fordi det ikke er et tegn.

F -konverteringskarakteren
Følgende kodesegment viser hvordan en formatspesifikasjon for et tall med et desimalpunkt, erstattes av den tilsvarende argumentverdien:

String str = streng.Format ("%F er en feil brøkdel.", 2.5);
System.ute.println (str);

Først må du merke deg at argumentet, 2.5, er ikke i sitater fordi det ikke er en streng. Utgangen er:

2.500000 er en feil brøkdel.

2.5 er formatert til 2.500000, standardformateringen. Det kan begrenses til 2.5 Som gitt - se nedenfor.

% Konverteringskarakter
Siden prosentsymbolet brukes til å identifisere formatspesifikasjonen, må det utvikles et skjema for å ha % -symbolet som et vanlig tegn i formatstrengen. Ordningen er enkel: Ha % som et karakterargument i argumentlisten. Bruk deretter % konverteringskarakter i posisjonen i formatstrengen, der prosentsymbolet skal vises. Følgende kodesegment illustrerer dette:

String str = streng.Format ("Det er 100 %%.", '%');
System.ute.println (str);

Utgangen er:

Det er 100%.

Formatspesifikasjonen er %%. Den første %av paret, %%, er det som identifiserer spesifikasjonen. Den andre % er konverteringsfiguren. Som et argument er % i enkelt sitater.

N -konverteringskarakteren
For å få resten av teksten til høyre i formatstrengen til å gå på neste linje ved utgangen, bruk n. n er et konverteringspersonell som skal brukes i en formatspesifikasjon. Illustrasjon:

String str = streng.Format ("Første setning.%nsecond setning.", '\ n');
System.ute.println (str);

Utgangen er:

Første setning.
Andre setning.

De .Presisjonsparameter for formatspesifikasjonen

Denne parameteren indikerer antall desimaler for et tall med desimaler. Det er et helt tall foran med poenget. Som lagt merke til ovenfor, det forventede antall desimaler for 2.5 er en karakter; Men 6 tegn ble brukt, og ga 2.500000. Følgende kodesegment begrenser dette til 3 desimaler:

String str = streng.format("%.3F er en feil brøkdel.", 2.5);
System.ute.println (str);

Utgangen er:

2.500 er en feil brøkdel.

Presisjonskoden her er .3 .

Breddeparameteren til formatspesifikasjonen

Bredden er minimum antall tegn for erstatning i formatstrengen. Noen argumenttyper erstatter formatspesifikasjonen med forventet bredde. Andre kan imidlertid erstatte den med en mindre eller større bredde. Som lagt merke til ovenfor, forventet bredde for 2.5 er tre tegn; Men 8 tegn ble brukt, og ga 2.500000. Følgende kodesegment skal begrense dette til en bredde på 4 tegn, og tre desimaler:

String str = streng.Format ("%4.3F er en feil brøkdel.", 2.5);
System.ute.println (str);

Utgangen er:

2.500 er en feil brøkdel.

Formatspesifikasjonen er %4.3f, der 4 er bredden, og 3 er antall desimaler. Det er faktisk 5 tegn på utgangen, inkludert desimalpunktet, så 4 ble faktisk ignorert. Følgende kodesegment produserer en bredde på 7 tegn og 3 desimaler:

String str = streng.Format ("%7.3F er en feil brøkdel.", 2.5);
System.ute.println (str);

Utgangen er:

"" 2.500 er en feil brøkdel.

Legg merke til at to romtegn går foran nummeret for det komplette nummeret for å gjøre opp for en syv-tegn bredde. Antall desimaler er 3 . Det er 7 tegn her, alle sammen, inkludert desimalpunktet.

Flaggparameteren for formatspesifikasjonen

0 -flagget
I stedet for foregående et tall med mellomrom, kan antallet gå foran med 0 -er. Følgende kodesegment illustrerer dette:

String str = streng.Format ("%07.3F er en feil brøkdel.", 2.5);
System.ute.println (str);

Utgangen er:

002.500 er en feil brøkdel.

Det eksakte formatspesifikasjonen her er,

%07.3f

som bør sammenlignes med formatets spesifikasjonssyntaks,

%[Argument_index $] [Flags] [Bredde] [.presisjon] konvertering

Rekkefølgen på metakarakterene i det eksakte formatspesifikasjonen respekterer rekkefølgen på syntaks for formatspesifikatoren. Det valgfrie flagget, 0, kommer før den valgfrie bredden, 7, som kommer før den valgfrie presisjonen, .3, i samsvar med syntaksen. 'F' er konverteringen (fremdeles en metakarakter).

+ Flagget
Med + -flagget blir heltallresultatet alltid foran - eller + . Følgende program illustrerer dette:

String str = streng.Format ("Resultatet er %+D euro.", -5);
System.ute.println (str);

Utgangen er:

Resultatet er -5 euro.

Valgfri bredde og presisjonsparametere er ikke inkludert i den nøyaktige formatspesifikasjonen, %+d. Her er D konverteringen for heltallet.

Vurder kodesegmentet,

String str = streng.Format ("Resultatet er %+D euro.", 5);
System.ute.println (str);

Utgangen er,

Resultatet er +5 euro.

Konklusjon

Argumentene for strengformatmetoden er delt inn i to seksjoner. Den første delen er det første argumentet, som må være en streng. Det er strengen av interesse. Det kalles formatstrengen, selv om den fremdeles har noen av sine understrenger (formatert). Resten av argumentene blir referert til som argumentlisten. Argumentlisten har de virkelige underlagene som trenger formatering. Hver av disse underlagene tilsvarer en formatspesifikasjon i formatstrengen. Formatspesifikasjonen bruker metakaraktører for å formatere.