Cvičení – zkoumání základů formátování řetězců
- 20 min
V této lekci se naučíte, jak formátovat řetězce pro efektivní zobrazení, zejména pro případy použití více proměnných.
Příprava programovacího prostředí
Tento modul obsahuje praktické aktivity, které vás provedou procesem sestavování a spouštění ukázkového kódu. Doporučujeme, abyste tyto aktivity dokončili pomocí editoru Visual Studio Code jako vývojového prostředí. Používání editoru Visual Studio Code pro tyto aktivity vám pomůže stát se pohodlnějším psaním a spouštěním kódu v vývojářském prostředí, které používají profesionálové po celém světě.
Poznámka:
Pokud jste dokončili další moduly Microsoft Learn v této řadě C#, možná jste už vytvořili složku projektu pro ukázky kódu. V takovém případě můžete přeskočit následující část kroků a odstranit kód v Project.cs souboru použitém pro předchozí cvičení.
Otevřete Visual Studio Code. K otevření editoru Visual Studio Code můžete použít windows nabídka Start (nebo ekvivalentní prostředek pro jiný operační systém).
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku přejděte do složky Windows Desktop. Pokud máte jiné umístění složky, kde uchováváte projekty kódu, můžete místo toho použít toto umístění složky. Pro účely tohoto školení je důležité mít umístění, které je snadné najít a zapamatovat.
V dialogovém okně Otevřít složku vyberte Vybrat složku. Pokud se zobrazí dialogové okno zabezpečení s dotazem, jestli autorům důvěřujete, vyberte Ano.
V nabídce Terminálu editoru Visual Studio Code vyberte Nový terminál. Všimněte si, že příkazový řádek na panelu Terminálu zobrazuje cestu ke složce pro aktuální složku. Příklad:
C:\Users\someuser\Desktop>Na příkazovém řádku terminálu vytvořte novou konzolovou aplikaci v zadané složce, zadejte dotnet new console -o ./CsharpProjects/TestProject a stiskněte Enter. Tento příkaz rozhraní příkazového řádku .NET používá šablonu programu .NET k vytvoření nového projektu konzolové aplikace jazyka C# v zadaném umístění složky. Příkaz pro vás vytvoří složky CsharpProjects a TestProject a jako název
.csprojsouboru použije TestProject.Na panelu PRŮZKUMNÍK rozbalte složku CsharpProjects . Měli byste vidět složku TestProject a dva soubory, programový soubor jazyka C# s názvem Program.cs a soubor projektu C# s názvem TestProject.csproj.
Na panelu PRŮZKUMNÍK vyberte Program.cs, abyste zobrazili soubor kódu na panelu Editor.
Odstraňte existující řádky kódu. Tento projekt konzoly C# slouží k vytváření, sestavování a spouštění ukázek kódu během tohoto modulu.
Zavřete panel Terminálu.
Co je složené formátování?
Složené formátování používá číslované zástupné symboly v řetězci. V době běhu se vše uvnitř závorek přeloží na hodnotu, která se předává také na základě jejich pozice.
Tento příklad složeného formátování používá integrovanou metodu Format() pro klíčové slovo datového string typu. Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Pokud tento kód spustíte, uvidíte následující výstup.
Hello World!
V tomto kódu si můžete všimnout několika důležitých věcí.
- Datové typy a proměnné daného datového typu mají předdefinované „pomocné metody“, které usnadňují určité úlohy.
- Literálový řetězec
"{0} {1}!"tvoří šablonu, jejichž části se v době běhu nahradí. - Token
{0}je nahrazen prvním argumentem za šablonou řetězce, tedy vlastně hodnotou proměnnéfirst. - Token
{1}je nahrazen druhým argumentem za šablonou řetězce, tedy vlastně hodnotou proměnnésecond.
Poznámka:
Možná si myslíte, že je liché začít číslem 0. Při vývoji softwaru je to ve skutečnosti docela běžné. Všude, kde je nějaká posloupnost položek, kterou lze identifikovat pomocí čísla, začíná číslování většinou od 0.
Aktualizujte kód následujícím způsobem:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Měl by se zobrazit následující výstup:
World Hello! Hello Hello Hello!
Několik poznatků k těmto příkladům:
- V prvním
Console.WriteLine()příkazu si všimněte, že tokeny lze uspořádat v libovolném pořadí. Vzorový kód má{1}před{0}. - U druhého
Console.WriteLine()příkazu si všimněte, že tokeny lze znovu použít se třemi instancemi{0}. Druhý argumentsecondproměnné se také nepoužívá. Kód se ale stále spouští bez chyby.
Co je interpolace řetězců?
Interpolace řetězců je technika, která zjednodušuje složené formátování.
Místo použití očíslovaného tokenu a zahrnutí hodnoty literálu nebo názvu proměnné do seznamu argumentů metody String.Format() nebo Console.WriteLine() stačí uvnitř složených závorek použít název proměnné.
Aby bylo možné řetězec interpolovat, musíte ho uvodit direktivou
$. Teď vytvořte stejné příklady z dřívějšího použití interpolace řetězců místo složeného formátování. Aktualizujte kód následujícím způsobem:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Měl by se zobrazit následující výstup:
Hello World! World Hello! Hello Hello Hello!
Poznámka:
Pokud se podíváte na příklady kódu v knihách a online, pravděpodobně uvidíte použité složené formátování i interpolaci řetězců , ale obecně byste měli zvolit interpolaci řetězců.
Formátování měny
Složené formátování a interpolaci řetězců lze použít k formátování hodnot pro zobrazení v daném jazyce a jazykové verzi. V následujícím příkladu se specifikátor formátu měny :C používá k zobrazení proměnných price a discount jako měny. Aktualizujte kód následujícím způsobem:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Pokud jste tento kód spustili na počítači s jazykem zobrazení systému Windows nastaveným na "Angličtina (USA)", zobrazí se následující výstup.
Price: $123.45 (Save $50.00)
Všimněte si, jak přidání :C do tokenů uvnitř složených závorek naformátuje číslo jako měnu bez ohledu na to, jestli používáte int nebo decimal.
Poznámka:
Co se stane, když vaše země nebo oblast a jazyk nejsou známé? Pokud spustíte předchozí kód v editoru .NET v prohlížeči, například v TrydotNet, zobrazí se následující výstup: Price: ¤123.45 (Save ¤50.00) Symbol ¤ se použije místo symbolu pro peníze vaší země/oblasti. Jedná se o obecný symbol, který se používá k označení měny bez ohledu na typ měny. Tento symbol vidíte v editoru .NET, protože ignoruje vaši aktuální polohu.
Vliv na formátování řetězců v zemi/oblasti a jazyku uživatele
Co když spustíte předchozí kód na počítači ve Francii, který má jeho jazyk zobrazení systému Windows nastavený na francouzštinu? V takovém případě byste viděli následující výstup.
Price: 123,45 € (Save 50,00 €)
Důvodem předchozího výstupu "€" je, že funkce formátování měny řetězce závisí na nastavení počítače pro místní lokaci kultura. V tomto kontextu termín "culture" odkazuje na zemi/oblast a jazyk koncového uživatele. Kód jazykové verze je řetězec s pěti znaky, který počítače používají k identifikaci umístění a jazyka koncového uživatele. Kód jazykové verze zajišťuje správné zobrazení určitých informací, jako jsou kalendářní data a měna.
Příklad:
- Kód jazykové verze anglicky mluvící osoby v USA je
en-US. - Kód jazykové verze francouzsky mluvící osoby ve Francii je
fr-FR. - Kód jazykové verze francouzsky mluvící osoby v Kanadě je
fr-CA.
Jazyková verze má vliv na systém zápisu, použitý kalendář, pořadí řazení řetězců a formátování kalendářních dat a čísel (například formátování měny).
Zajištění správného fungování kódu na všech počítačích bez ohledu na zemi nebo oblast nebo jazyk koncového uživatele je bohužel náročné. Tento proces se označuje jako lokalizace (nebo globalizace). Lokalizace závisí na mnoha faktorech, které nejsou popsány v tomto modulu, ale jednoduše může syntaxe formátování řetězců používat jiný formát v závislosti na jazykové verzi uživatele.
Formátování čísel
Při práci s číselnými daty můžete chtít číslo naformátovat tak, že číslo naformátujete tak, že zadáte čárky, aby se vyčíslily tisíce, miliony, miliardy atd.
Specifikátor číselného N formátu zpřístupňuje čísla čitelnějším. Aktualizujte kód následujícím způsobem:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Pokud si to prohlížíte z en-US jazykové verze, uvidíte následující výstup.
Measurement: 123,456.79 units
Specifikátor číselného formátu N zobrazuje standardně jen dvě číslice za desetinnou čárkou.
Pokud chcete zobrazit větší přesnost, můžete toho dosáhnut přidáním čísla za tento specifikátor. Následující kód zobrazí pomocí specifikátoru N4 čtyři číslice za desetinnou čárkou. Aktualizujte kód následujícím způsobem:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Pokud si to prohlížíte z en-US jazykové verze, uvidíte následující výstup.
Measurement: 123,456.7891 units
Formátování procent
Pomocí specifikátoru P formátu můžete formátovat procenta a zaokrouhlit na 2 desetinná místa. Přidáním čísla dozadu můžete určit počet číslic zobrazených za desetinnou čárkou. Aktualizujte kód následujícím způsobem:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Pokud si to prohlížíte z en-US jazykové verze, uvidíte následující výstup.
Tax rate: 36.79%
Kombinování přístupů k formátování
Řetězcové proměnné mohou ukládat řetězce vytvořené pomocí technik formátování. V následujícím příkladu jsou desetinná čísla a desetinné matematické výsledky formátovány a uloženy v yourDiscount řetězci pomocí složeného formátování.
Následujícím způsobem aktualizujte kód.
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);
Pokud si to prohlížíte z en-US jazykové verze, uvidíte následující výstup.
You saved $7.56 off the regular $67.55 price.
Můžete zkombinovat více formátovaných řetězců. Zabudujte na předchozím kódu, který zřetězí počítané procento pomocí interpolace řetězců místo zřetězení řetězců vložením yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; do kódu na řádku před Console.WriteLine().
Poznámka:
Tento přístup k interpolaci řetězců nemusíte používat String.Format() .
Následujícím způsobem aktualizujte kód.
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);
Pokud si tuto jednotku en-US prohlížíte z jazykové verze, uvidíte následující výstup.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Rekapitulace
Zde jsou nejdůležitější poznatky z této lekce o formátování řetězců:
- K formátování řetězců můžete použít složené formátování nebo interpolaci řetězců.
- S složeným formátováním používáte šablonu řetězce obsahující jeden nebo více náhradních tokenů ve tvaru
{0}. Dodáte také seznam argumentů, které se s nahrazovanými tokeny párují na základě jejich pořadí. Složené formátování funguje při použití metodstring.Format()neboConsole.WriteLine(). - Při interpolaci řetězců použijete šablonu řetězce obsahující názvy proměnných, které chcete nahradit obklopené složenými závorkami. Pomocí direktivy
$před šablonou řetězce označíte, že se řetězec má interpolovat. - K formátování měny se používá specifikátor
:C. - K formátování čísel se používá specifikátor
:N. Přesnost (počet číslic za desetinnou čárkou) se určuje pomocí čísla za:N, například{myNumber:N3}. - Formátování procent pomocí specifikátoru
:Pformátu - Formátování měny a čísel závisí na jazykové verzi koncového uživatele, pětiznakový kód, který zahrnuje zemi nebo oblast a jazyk uživatele (podle nastavení v počítači).