Cvičení – použití pomocných řetězcových metod IndexOf() a Substring()
- 25 min
V tomto cvičení použijete metodu IndexOf() k vyhledání pozice jednoho nebo více znaků řetězce uvnitř většího řetězce. Pomocí Substring() metody vrátíte část většího řetězce, která následuje za zadanými pozicemi znaků.
Také použijete přetíženou verzi Substring() metody k nastavení délky znaků, které se mají vrátit po zadané pozici v řetězci.
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ý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 nabídku Start systému Windows (nebo odpovídající 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. Napří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# používáte k vytváření, sestavování a spouštění ukázek kódu během tohoto modulu.
Zavřete panel Terminálu.
Napsání kódu pro vyhledání párů závorek vložených do řetězce
Ujistěte se, že máte visual Studio Code otevřený a Program.cs zobrazený na panelu Editor.
Poznámka:
Program.cs by měl být prázdný. Pokud tomu tak není, vyberte a odstraňte všechny řádky kódu.
Do editoru visual studio Code zadejte následující kód:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); Console.WriteLine(openingPosition); Console.WriteLine(closingPosition);V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
Soubor Program.cs musí být uložen před sestavením nebo spuštěním kódu.
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>Měl by se zobrazit následující výstup:
13 36V tomto případě je index znaku
(13. Nezapomeňte, že tyto hodnoty jsou založené na nule, takže se jedná o 14. znak v řetězci. Index znaku)je36.Teď, když máte dva indexy, můžete je použít jako hranice k načtení hodnoty mezi nimi.
Přidání kódu pro načtení hodnoty mezi závorky
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); // Console.WriteLine(openingPosition); // Console.WriteLine(closingPosition); int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));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:
(inside the parenthesesMetoda
Substring()potřebuje počáteční pozici a počet znaků nebo délku, které se mají načíst. Proto vypočítáte délku v dočasné proměnné volanélengtha předáte ji sopeningPositionhodnotou, která načte řetězec uvnitř závorek.Výsledek je blízko, ale výstup zahrnuje levou závorku. V tomto cvičení není zahrnutí závorek žádoucí. Pokud chcete z výstupu odebrat závorky, musíte kód aktualizovat, aby se přeskočí index samotné závorky.
Úprava počáteční pozice podřetězce
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); openingPosition += 1; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));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:
inside the parenthesesChvíli si projděte předchozí kód a řádek
openingPosition += 1;.openingPosition1Zvýšením znaménečky přes levou závorku.Důvodem, proč tuto hodnotu
1používáte, je to, že je délka znaku. Pokud se například pokusíte najít hodnotu začínající po delším řetězci,<div>---použijte místo toho délku tohoto řetězce.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string message = "What is the value <span>between the tags</span>?"; int openingPosition = message.IndexOf("<span>"); int closingPosition = message.IndexOf("</span>"); openingPosition += 6; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));Chvíli si projděte předchozí kód a řádek
openingPosition += 6;.Předchozí fragment kódu ukazuje, jak najít hodnotu uvnitř otevírací a koncové
<span>značky.V tomto případě přidáváte
6jakoopeningPositionposun k výpočtu délky podřetězce.
Vyhněte se magickým hodnotám
Pevně zakódované řetězce jako "<span>" v předchozím výpisu kódu se označují jako "magické řetězce" a pevně zakódované číselné hodnoty, jako 6 jsou "magic numbers". Tyto "magické" hodnoty jsou nežádoucí z mnoha důvodů a měli byste se je snažit vyhnout, pokud je to možné.
Projděte si předchozí kód a zvažte, jak může kód přerušit, pokud jste řetězec
"<span>"v kódu několikrát zakódovali, ale chybně napsanou jednu instanci jako"<sapn>".Kompilátor se v době kompilace nezachytí
"<sapn>", protože hodnota je v řetězci. Chybně napsané dokumentace vedou k problémům za běhu a v závislosti na složitosti kódu může být obtížné ho sledovat.Navíc pokud změníte řetězec
"<span>"na kratší"<div>", ale zapomenete změnit číslo6na5, pak váš kód vytvoří nežádoucí výsledky.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string message = "What is the value <span>between the tags</span>?"; const string openSpan = "<span>"; const string closeSpan = "</span>"; int openingPosition = message.IndexOf(openSpan); int closingPosition = message.IndexOf(closeSpan); openingPosition += openSpan.Length; int length = closingPosition - openingPosition; Console.WriteLine(message.Substring(openingPosition, length));Prohlédněte si aktualizovaný kód a použití klíčového slova
const, jak je použito vconst string openSpan = "<span>";.Kód používá konstantu s klíčovým slovem
const. Konstanta umožňuje definovat a inicializovat proměnnou, jejíž hodnotu nelze nikdy změnit. Tuto konstantu byste pak použili ve zbytku kódu, kdykoli tuto hodnotu potřebujete. Tím zajistíte, že hodnota bude definována pouze jednou a chybně napsanáconstproměnná je zachycena kompilátorem.Předchozí výpis kódu je bezpečnější způsob, jak napsat stejný kód, který jste prozkoumali v předchozí části. Nyní, pokud hodnota
openSpanzměny<div>, řádek kódu, který používáLengthvlastnost nadále platné.
Rekapitulace
Tato jednotka se zabývala velkým materiálem. Tady jsou nejdůležitější věci, které je potřeba si zapamatovat:
-
IndexOf()poskytuje první pozici znaku nebo řetězce uvnitř jiného řetězce. -
IndexOf()vrátí-1, pokud nemůže najít shodu. -
Substring()vrátí pouze zadanou část řetězce s použitím počáteční pozice a volitelné délky. - Často existuje více než jeden způsob, jak problém vyřešit. Pomocí dvou samostatných technik jste našli všechny instance daného znaku nebo řetězce.
- Vyhněte se pevně zakódovaným magickým hodnotám. Místo toho definujte proměnnou
const. Hodnotu konstantní proměnné nelze po inicializaci změnit.