Övning – Undersöka grunderna för strängformatering
- 20 minuter
I den här lektionen lär du dig metoder för att formatera strängar för effektiv visning, särskilt för fall som använder flera variabler.
Förbereda din kodningsmiljö
Den här modulen innehåller praktiska aktiviteter som vägleder dig genom processen att skapa och köra demonstrationskod. Du uppmanas att slutföra dessa aktiviteter med Visual Studio Code som utvecklingsmiljö. Genom att använda Visual Studio Code för dessa aktiviteter kan du bli mer bekväm med att skriva och köra kod i en utvecklarmiljö som används av proffs över hela världen.
Kommentar
Om du har slutfört andra Microsoft Learn-moduler i den här C#-serien kanske du redan har skapat en projektmapp för kodexempel. Om så är fallet kan du hoppa över följande stegavsnitt och ta bort koden i Project.cs
filen som användes för en tidigare övning.
Öppna Visual Studio Code. Du kan använda Windows Start-menyn (eller motsvarande resurs för ett annat operativsystem) för att öppna Visual Studio Code.
På menyn Visual Studio Code-fil väljer du Öppna mapp.
I dialogrutan Öppna mapp navigerar du till mappen Windows Desktop. Om du har en annan mappplats där du behåller kodprojekt kan du använda den mappplatsen i stället. För den här utbildningen är det viktigt att ha en plats som är enkel att hitta och komma ihåg.
I dialogrutan Öppna mapp väljer du Välj mapp. Om du ser en säkerhetsdialogruta som frågar om du litar på författarna väljer du Ja.
Välj Ny terminal på visual Studio Code-terminalmenyn. Observera att en kommandotolk i terminalpanelen visar mappsökvägen för den aktuella mappen. Till exempel:
C:\Users\someuser\Desktop>
Om du vill skapa ett nytt konsolprogram i en angiven mapp i terminalkommandot skriver du den nya dotnet-konsolen -o ./CsharpProjects/TestProject och trycker sedan på Retur. Det här .NET CLI-kommandot använder en .NET-programmall för att skapa ett nytt C#-konsolprogramprojekt på den angivna mappplatsen. Kommandot skapar mapparna CsharpProjects och TestProject åt dig och använder TestProject som namnet på
.csproj
filen.I explorer-panelen expanderar du mappen CsharpProjects . Du bör se mappen TestProject och två filer, en C#-programfil med namnet Program.cs och en C#-projektfil med namnet TestProject.csproj.
Välj Program.cs för att visa kodfilen i redigeringspanelen i explorer-panelen.
Ta bort de befintliga kodraderna. Du använder det här C#-konsolprojektet för att skapa, skapa och köra kodexempel under den här modulen.
Stäng terminalpanelen.
Vad är sammansatt formatering?
Sammansatt formatering använder numrerade platshållare i en sträng. Vid körning matchas allt inom klammerparenteserna till ett värde som också skickas in baserat på deras position.
Det här exemplet på sammansatt formatering använder en inbyggd metod Format()
för nyckelordet string
datatyp. Uppdatera koden i Visual Studio Code-redigeraren på följande sätt:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Om du kör den här koden ser du följande utdata.
Hello World!
Det finns några viktiga saker att beakta vad gäller den här koden.
- Datatyper och variabler för en viss datatyp har inbyggda ”hjälpmetoder” som gör vissa uppgifter enkla.
- Strängliteralen
"{0} {1}!"
utgör en mall, vars delar ersätts vid körning. - Token
{0}
ersätts av det första argumentet efter strängmallen, det vill säga värdet för variabelnfirst
. - Token
{1}
ersätts av det andra argumentet efter strängmallen, det vill säga värdet för variabelnsecond
.
Kommentar
Du kanske tycker att det är konstigt att börja med talet 0. Detta är faktiskt vanligt inom programvaruutveckling. När det finns en sekvens med objekt som kan identifieras med en siffra börjar numreringen vanligtvis med 0.
Uppdatera koden på följande sätt:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);
Spara kodfilen och använd sedan Visual Studio Code för att köra koden. Du bör se följande utdata:
World Hello! Hello Hello Hello!
Några observationer om dessa exempel:
- Observera att token kan ordnas i valfri ordning för den första
Console.WriteLine()
instruktionen. Exempelkoden har{1}
före{0}
. - För den andra
Console.WriteLine()
instruktionen observerar du att token kan återanvändas med tre instanser av{0}
. Det andra variabelargumentet,second
, används inte heller. Ändå körs koden fortfarande utan fel.
Vad är stränginterpolation?
Stränginterpolation är en teknik som förenklar sammansatt formatering.
I stället för att använda en numrerad token och inkludera literalvärdet eller variabelnamnet i en lista med argument till String.Format()
eller Console.WriteLine()
kan du helt enkelt använda variabelnamnet inuti klammerparenteserna.
För att en sträng ska kunna interpoleras måste du prefigera den med direktivet
$
. Skapa nu samma exempel från tidigare med hjälp av stränginterpolation i stället för sammansatt formatering. Uppdatera koden på följande sätt:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");
Spara kodfilen och använd sedan Visual Studio Code för att köra koden. Du bör se följande utdata:
Hello World! World Hello! Hello Hello Hello!
Kommentar
Om du tittar på kodexempel i böcker och online ser du förmodligen både sammansatt formatering och stränginterpolation som används, men vanligtvis bör du välja stränginterpolation.
Formatera valuta
Sammansatt formatering och stränginterpolering kan användas för att formatera värden för visning med ett specifikt språk och en specifik kultur. I följande exempel används valutaspecificeraren :C
för att presentera variablerna price
och discount
som valuta. Uppdatera koden på följande sätt:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Om du har kört den här koden på en dator som har sitt Windows-visningsspråk inställt på "Engelska (USA)" ser du följande utdata.
Price: $123.45 (Save $50.00)
Observera hur tillägget av :C
i token inom klammerparenteserna formaterar talet som valuta oavsett om du använder int
eller decimal
.
Kommentar
Vad händer om ditt land/din region och ditt språk inte är känt? Om du kör den tidigare koden i .NET-redigeraren i webbläsaren, till exempel i TrydotNet , visas följande utdata: Price: ¤123.45 (Save ¤50.00)
. Symbolen ¤
används i stället för symbolen för ditt lands/din regions pengar. Detta är en allmän symbol som används för att ange "valuta" oavsett typ av valuta. Du ser den här symbolen i .NET-redigeringsprogrammet eftersom den ignorerar din aktuella plats.
Hur användarens land/region och språk påverkar strängformatering
Vad händer om du kör den tidigare koden på en dator i Frankrike som har sitt Windows-visningsspråk inställt på franska? I så fall visas följande utdata.
Price: 123,45 € (Save 50,00 €)
Anledningen till föregående "€"-utdata är att funktionen för strängvalutaformatering är beroende av den lokala datorinställningen för kultur. I det här sammanhanget refererar termen "kultur" till slutanvändarens land/region och språk. Kulturkoden är en sträng med fem tecken som datorer använder för att identifiera slutanvändarens plats och språk. Kulturkoden säkerställer att viss information som datum och valuta kan presenteras korrekt.
Till exempel:
- Kulturkoden för engelsktalande i USA är
en-US
. - Kulturkoden för fransktalande i Frankrike är
fr-FR
. - Kulturkoden för fransktalande i Kanada är
fr-CA
.
Kulturen påverkar skriftsystemet, den kalender som används, sorteringsordningen för strängar samt formatering av datum och siffror (till exempel valutaformateringen).
Tyvärr är det svårt att se till att koden fungerar korrekt på alla datorer oavsett land/region eller slutanvändarens språk. Den här processen kallas lokalisering (eller globalisering). Lokalisering beror på många faktorer som inte beskrivs i den här modulen, men strängformateringssyntaxen kan använda ett annat format beroende på användarens kultur.
Formatera tal
När du arbetar med numeriska data kanske du vill formatera talet för läsbarhet genom att inkludera kommatecken för att avgränsa tusentals, miljoner, miljarder och så vidare.
Den N
numeriska formatspecificeraren gör tal mer läsbara. Uppdatera koden på följande sätt:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Om du visar detta från en-US
kulturen ser du följande utdata.
Measurement: 123,456.79 units
Som standard visar specificeraren N
för nummerformat endast två siffror efter decimaltecknet.
Du kan visa mer precision genom att lägga till ett nummer efter specificeraren. Följande kod visar fyra siffror efter decimaltecknet med hjälp av specificeraren N4
. Uppdatera koden på följande sätt:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Om du visar detta från en-US
kulturen ser du följande utdata.
Measurement: 123,456.7891 units
Formatera procentandelar
P
Använd formatspecificeraren för att formatera procentandelar och avrunda till 2 decimaler. Lägg till ett tal efteråt för att kontrollera det antal värden som visas efter decimaltecknet. Uppdatera koden på följande sätt:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Om du visar detta från en-US
kulturen ser du följande utdata.
Tax rate: 36.79%
Kombinera formateringsmetoder
Strängvariabler kan lagra strängar som skapats med hjälp av formateringstekniker. I följande exempel formateras decimaler och decimalmatikresultat och lagras i strängen yourDiscount
med sammansatt formatering.
Uppdatera koden på följande sätt.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
Om du visar detta från en-US
kulturen ser du följande utdata.
You saved $7.56 off the regular $67.55 price.
Du kan kombinera flera formaterade strängar. Skapa på den tidigare koden som sammanfogar den beräknade procentandelen med hjälp av stränginterpolationen i stället för strängsammanfogning genom att yourDiscount += $"A discount of {(price - salePrice)/price:P2}!";
infoga i koden på raden före Console.WriteLine()
.
Kommentar
Du behöver inte använda String.Format()
den här stränginterpoleringsmetoden.
Uppdatera koden på följande sätt.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
Om du visar den här enheten från en-US
kulturen ser du följande utdata.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Sammanfattning
Här är de viktigaste lärdomarna om teckenformatering från den här lektionen:
- Du kan använda sammansatt formatering eller stränginterpolering för att formatera strängar.
- Med sammansatt formatering använder du en strängmall som innehåller en eller flera ersättningstoken i formuläret
{0}
. Du anger även en lista med argument som matchas till ersättningstoken baserat på ordningen. Sammansatt formatering fungerar när du använderstring.Format()
ellerConsole.WriteLine()
. - Med stränginterpolation använder du en strängmall som innehåller de variabelnamn som du vill ersätta omgiven av klammerparenteser. Använd direktivet
$
före strängmallen för att ange att du vill interpolera strängen. - Formatera valuta med hjälp specificeraren
:C
. - Formatera tal med hjälp specificeraren
:N
. Kontrollera precisionen (antalet värden efter decimaltecknet) med hjälp av ett tal efter:N
, till exempel{myNumber:N3}
. - Formatera procentandelar med formatspecificeraren
:P
. - Formatering av valuta och tal beror på slutanvändarens kultur, en kod med fem tecken som innehåller användarens land/region och språk (enligt inställningarna på datorn).