Cvičení – zjišťování odsazení a zarovnání
- 12 min
Metoda string.Format() se používá k provádění složeného formátování, jako je například v příkladu:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Mohlo se zdát trochu divné, že klíčové slovo, které představuje datový typ, obsahuje metody, které můžete volat stejným způsobem, jakým voláte metody ve Console třídě. Skutečnost je, že existuje mnoho podobných metod pro datový typ string a jakýkoli řetězec literálů nebo proměnných typu text.
Tady je stručný seznam kategorií těchto předdefinovaných metod, abyste získali představu o tom, co je možné.
- Metody, které přidávají prázdné mezery pro účely formátování (
PadLeft(),PadRight()) - Metody, které porovnávají dva řetězce nebo usnadňují porovnání (
Trim(),TrimStart(),TrimEnd(),GetHashcode(),Lengthvlastnost) - Metody, které vám pomůžou určit, co je uvnitř řetězce, nebo dokonce načíst jen část řetězce (
Contains(),StartsWith(),EndsWith(), )Substring() - Metody, které mění obsah řetězce nahrazením, vložením nebo odebráním částí (
Replace(),Insert(),Remove()) - Metody, které mění řetězec na pole řetězců nebo znaků (
Split(),ToCharArray())
Formátování řetězců přidáním prázdných znaků před nebo za
Metoda PadLeft() přidá na levou stranu řetězce prázdné mezery, aby se celkový počet znaků rovnal argumentu, který odešlete. V tomto případě chcete, aby celková délka řetězce byla 12 znaků.
Odstraňte nebo použijte operátor
//komentáře řádku k zakomentování veškerého kódu z předchozích cvičení.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string input = "Pad this"; Console.WriteLine(input.PadLeft(12));V nabídce Soubor editoru Visual Studio Code vyberte Uložit. Před sestavením nebo spuštěním kódu uložte soubor Program.cs.
Na panelu PRŮZKUMNÍK otevřete terminál v umístění složky TestProject, klikněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu. Měl by se otevřít panel terminálu a měl by obsahovat příkazový řádek zobrazující, že terminál je otevřený v umístění složky TestProject.
Na příkazovém řádku terminálu pro spuštění vašeho kódu zadejte dotnet run a stiskněte Enter.
Poznámka:
Pokud se zobrazí zpráva "Nepodařilo se najít projekt ke spuštění", ujistěte se, že příkazový řádek terminálu zobrazí očekávané umístění složky TestProject. Příklad:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Když spustíte kód, uvidíte čtyři znaky, které jsou předponou nalevo od řetězce, přinesou délku na 12 znaků.
Pad thisPokud chcete na pravou stranu řetězce přidat mezeru nebo znaky, použijte místo toho metodu
PadRight(). 1. Následujícím způsobem aktualizujte kód v editoru visual Studio Code:Console.WriteLine(input.PadRight(12));Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Nebudete sledovat žádné znaky přidané na konec řetězce, ale jsou tam.
Co je přetížená metoda?
V jazyce C# je přetížená metoda jinou verzí metody s různými nebo nadbytečnými argumenty, které upravují funkčnost metody mírně, stejně jako u přetížené verze PadLeft() metody.
Můžete také volat druhou přetíženou verzi metody a předat jakýkoli znak, který chcete použít místo mezery. V tomto případě vyplníte nadbytečné místo znakem pomlčky.
Odstraňte nebo použijte operátor
//komentáře řádku k zakomentování veškerého kódu z předchozího kroku.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
Console.WriteLine(input.PadLeft(12, '-')); Console.WriteLine(input.PadRight(12, '-'));Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Měli byste vidět čtyři pomlčky před řetězcem na levé straně, který má délku 12 znaků.
----Pad this Pad this----
Teď tuto nově nabytou znalost použijte v jiném scénáři reálného světa.
Práce s vnořenými řetězci
Předpokládejme, že pracujete pro společnost pro zpracování plateb, která stále podporuje starší systémy sálových počítačů. Tyto systémy často vyžadují, aby data byla vstupní v konkrétních sloupcích. Například uložte ID platby ve sloupcích 1 až 6, název příjemce ve sloupcích 7 až 30 a Částka platby ve sloupcích 31 až 40. Důležité je také, že částka platby je zarovnaná doprava.
Zobrazí se výzva k vytvoření aplikace, která převede data v systému pro správu relačních databází na starší formát souboru. Abyste měli jistotu, že integrace funguje správně, je prvním krokem potvrzení formátu souboru tím, že správci starší verze systému poskytují ukázku výstupu. Později na této práci stavíte tak, že odešlete stovky nebo tisíce plateb, které se budou zpracovávat prostřednictvím textového souboru ASCII.
Přidání ID platby do výstupu
Začněte tak, že v prvních šesti sloupcích vytisknete ID platby. Vyberete nějaká náhodná platební data, která by měla být vhodná pro účely.
Odstraňte nebo použijte operátor
//komentáře řádku k zakomentování veškerého kódu z předchozího kroku.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string paymentId = "769C"; var formattedLine = paymentId.PadRight(6); Console.WriteLine(formattedLine);Znovu použijte proměnnou
formattedLinek sestavení výstupního řetězce.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:
769C
Vpravo jsou dvě prázdné mezery, které nejsou viditelné. Potvrdíte, že existují v dalším kroku.
Přidání názvu příjemce do výstupu
Poté přidáte fiktivní jméno příjemce a případně ho vhodně vyplníte.
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); Console.WriteLine(formattedLine);Operátor
+=provede zřetězení řetězce, přičemž vezme předchozí hodnotu proměnnéformattedLinea přidá do ní novou hodnotu. Jedná se o zkrácený ekvivalent následujícího příkladu kódu:formattedLine = formattedLine + payeeName.PadRight(24);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:
769C Mr. Stephen Ortega
Za názvem příjemce je opět několik prázdných mezer. Za ID platby z kroku 1 jsou také dvě prázdné mezery.
Přidání částky platby do výstupu
Dále přidejte fiktivní částku platby a nezapomeňte použít PadLeft() k zarovnání výstupu doprava.
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine(formattedLine);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:
769C Mr. Stephen Ortega $5,000.00
Tento výstup je docela blízko tomu, co jste rozuměli starším systémovým správci, kteří hledali.
Přidejte řádek čísel nad výstup, abyste snadněji potvrdili výsledek.
Vzhledem k tomu, že je obtížné spočítat přesné sloupce, ve kterých se každý datový prvek objeví, přidáte řádek přímo nad výstup, který vám pomůže spočítat sloupce.
Console.WriteLine("1234567890123456789012345678901234567890");
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine("1234567890123456789012345678901234567890"); Console.WriteLine(formattedLine);Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Měli byste vidět následující výstup, který můžete odeslat správci starší verze systému, abyste potvrdili, že nová integrace funguje správně:
1234567890123456789012345678901234567890 769C Mr. Stephen Ortega $5,000.00
Úspěch!
Rekapitulace
Z této lekce plyne několik důležitých poznatků.
- Datový
stringtyp, literální řetězce a proměnné typu řetězec každý implementuje mnoho pomocných metod pro formátování, úpravy a provádění dalších operací s řetězci. - Metody
PadLeft()aPadRight()přidávají k celkové délce řetězce bílé místo (případně jiný znak). - Použijte
PadLeft()k zarovnání řetězce doprava. - Některé metody jsou přetížené, což znamená, že mají více verzí metody s různými argumenty, které ovlivňují jejich funkčnost.
- Operátor
+=zřetězí nový řetězec vpravo s existujícím řetězcem vlevo.