Oefening: de helpermethoden IndexOf() en Substring() van de tekenreeks gebruiken
- 25 minuten
In deze oefening gebruikt u de IndexOf() methode om de positie van een of meer tekens in een grotere tekenreeks te zoeken. U gebruikt de Substring() methode om het deel van de grotere tekenreeks te retourneren dat volgt op de tekenposities die u opgeeft.
U gebruikt ook een overbelaste versie van de Substring() methode om de lengte van tekens in te stellen die moet worden geretourneerd na een opgegeven positie in een tekenreeks.
Uw coderingsomgeving voorbereiden
Deze module bevat praktische activiteiten die u begeleiden bij het bouwen en uitvoeren van demonstratiecode. U wordt aangeraden deze activiteiten uit te voeren met Visual Studio Code als ontwikkelomgeving. Door Visual Studio Code voor deze activiteiten te gebruiken, kunt u vertrouwd raken met het schrijven en uitvoeren van code in een ontwikkelomgeving die wordt gebruikt door professionals wereldwijd.
Opmerking
Als u andere Microsoft Learn-modules in deze C#-serie hebt voltooid, hebt u mogelijk al een projectmap gemaakt voor codevoorbeelden. Als dat het geval is, kunt u de volgende sectie met stappen overslaan en de code verwijderen in het Project.cs bestand dat voor een vorige oefening is gebruikt.
Open Visual Studio Code.
U kunt de Windows-Startmenu (of een equivalente resource voor een ander besturingssysteem) gebruiken om Visual Studio Code te openen.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Navigeer in het dialoogvenster Open Folder naar de Windows-bureaublad-map.
Als u een andere maplocatie hebt waar u codeprojecten bewaart, kunt u die maplocatie gebruiken. Voor deze training is het belangrijk om een locatie te hebben die gemakkelijk te vinden en te onthouden is.
Selecteer in het dialoogvenster Map openen de optie Map selecteren.
Als u een beveiligingsdialoogvenster ziet waarin u wordt gevraagd of u de auteurs vertrouwt, selecteert u Ja.
Selecteer In het menu Visual Studio Code Terminal de optie Nieuwe terminal.
U ziet dat in een opdrachtprompt in het terminalvenster het mappad voor de huidige map wordt weergegeven. Voorbeeld:
C:\Users\someuser\Desktop>Typ in de Terminal-opdrachtprompt om een nieuwe consoletoepassing in een opgegeven map te maken: dotnet new console -o ./CsharpProjects/TestProject en druk vervolgens op Enter.
Deze .NET CLI-opdracht maakt gebruik van een .NET-programmasjabloon om een nieuw C#-consoletoepassingsproject te maken op de opgegeven maplocatie. Met de opdracht worden de mappen CsharpProjects en TestProject voor u gemaakt en wordt TestProject gebruikt als de naam van het
.csprojbestand.Vouw in het deelvenster EXPLORER de map CsharpProjects uit.
U ziet de map TestProject en twee bestanden, een C#-programmabestand met de naam Program.cs en een C#-projectbestand met de naam TestProject.csproj.
Selecteer Program.cs in het deelvenster Editor om uw codebestand in het deelvenster Editor weer te geven.
Verwijder de bestaande coderegels.
U gebruikt dit C#-consoleproject om codevoorbeelden te maken, te bouwen en uit te voeren tijdens deze module.
Sluit het venster Terminal.
Code schrijven om haakjes paren te zoeken die zijn ingesloten in een tekenreeks
Zorg ervoor dat Visual Studio Code is geopend en Program.cs weergegeven in het deelvenster Editor.
Opmerking
Program.cs moet leeg zijn. Als dat niet het geval is, selecteer en verwijder alle coderegels.
Typ de volgende code in de Visual Studio Code-editor:
string message = "Find what is (inside the parentheses)"; int openingPosition = message.IndexOf('('); int closingPosition = message.IndexOf(')'); Console.WriteLine(openingPosition); Console.WriteLine(closingPosition);Selecteer Opslaan in het menu Visual Studio Code File.
Het Program.cs-bestand moet worden opgeslagen voordat u de code bouwt of uitvoert.
Klik in het deelvenster EXPLORER om een Terminal te openen op de locatie van de map TestProject met de rechtermuisknop op TestProject en selecteer Vervolgens Openen in geïntegreerde terminal.
Er moet een terminalvenster worden geopend en moet een opdrachtprompt bevatten die laat zien dat de Terminal is geopend voor de locatie van de testproject-map.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
Opmerking
Als er een bericht wordt weergegeven met de tekst 'Kan een project niet vinden om uit te voeren', controleert u of in de Terminal-opdrachtprompt de verwachte locatie van de testprojectmap wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop\csharpprojects\TestProject>U ziet nu de volgende uitvoer:
13 36In dit geval is de index van het
(teken 13. Houd er rekening mee dat deze waarden op nul zijn gebaseerd, dus het 14e teken in de tekenreeks. De index van het)teken is36.Nu u de twee indexen hebt, kunt u deze gebruiken als de grenzen om de waarde ertussen op te halen.
Code toevoegen om de waarde tussen haakjes op te halen
Werk uw code als volgt bij in de Visual Studio Code-editor:
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));Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren. U ziet nu de volgende uitvoer:
(inside the parenthesesDe
Substring()methode heeft de beginpositie en het aantal tekens, of lengte, nodig om op te halen. U berekent dus de lengte in een tijdelijke variabele met de naamlengthen geeft deze door met deopeningPositionwaarde om de tekenreeks binnen het haakje op te halen.Het resultaat is gesloten, maar de uitvoer bevat het haakje openen. In deze oefening is het niet gewenst om het haakje op te nemen. Als u het haakje uit de uitvoer wilt verwijderen, moet u de code bijwerken om de index van het haakje zelf over te slaan.
De beginpositie van de subtekenreeks wijzigen
Werk uw code als volgt bij in de Visual Studio Code-editor:
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));Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren. U ziet nu de volgende uitvoer:
inside the parenthesesNeem even de tijd om de vorige code en de regel
openingPosition += 1;te bekijken.Door het
openingPosition1aantal haakjes openen te vergroten, slaat u het haakje openen over.De reden waarom u de waarde
1gebruikt, is omdat dat de lengte van het teken is. Als u probeert een waarde te vinden die begint na een langere tekenreeks, bijvoorbeeld<div>---, gebruikt u in plaats daarvan de lengte van die tekenreeks.Werk uw code als volgt bij in de Visual Studio Code-editor:
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));Neem even de tijd om de vorige code en de regel
openingPosition += 6;te bekijken.In het voorgaande codefragment ziet u hoe u de waarde in een openings- en slottag
<span>kunt vinden.In dit geval voegt
6u toe aan deopeningPositionoffset om de lengte van de subtekenreeks te berekenen.
Magic-waarden vermijden
Vastgelegde tekenreeksen, zoals "<span>" in de vorige codevermelding, worden 'magic strings' genoemd en vastgelegde numerieke waarden, zoals 6 'magic numbers'. Deze 'Magic'-waarden zijn om vele redenen ongewenst en u moet ze indien mogelijk vermijden.
Bekijk de vorige code om na te gaan hoe de code kan worden verbroken als u de tekenreeks
"<span>"meerdere keren in uw code hebt gecodeerd, maar één exemplaar ervan verkeerd gespeld als"<sapn>".De compiler wordt tijdens het compileren niet onderscheppen
"<sapn>"omdat de waarde zich in een tekenreeks bevindt. De spelfout leidt tot problemen tijdens runtime, en afhankelijk van de complexiteit van uw code kan het lastig zijn om op te sporen.Bovendien, als u de tekenreeks
"<span>"wijzigt in de kortere"<div>", maar vergeet het getal65te wijzigen in , produceert uw code ongewenste resultaten.Werk uw code als volgt bij in de Visual Studio Code-editor:
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));Neem even de tijd om de bijgewerkte code en het gebruik van het trefwoord
constte bekijken zoals gebruikt inconst string openSpan = "<span>";.De code maakt gebruik van een constante met het
consttrefwoord. Met een constante kunt u een variabele definiëren en initialiseren waarvan de waarde nooit kan worden gewijzigd. Vervolgens gebruikt u die constante in de rest van de code wanneer u die waarde nodig hebt. Dit zorgt ervoor dat de waarde slechts eenmaal wordt gedefinieerd en dat deconstvariabele verkeerd wordt gespeld door de compiler.De vorige codevermelding is een veiligere manier om dezelfde code te schrijven die u in de vorige sectie hebt onderzocht. Als de waarde van
openSpanwijzigingen<div>nu is, blijft de coderegel die gebruikmaakt van deLengtheigenschap geldig.
Samenvatting
Deze eenheid bedekte veel materiaal. Dit zijn de belangrijkste dingen die u moet onthouden:
-
IndexOf()geeft u de eerste positie van een teken of tekenreeks in een andere tekenreeks. -
IndexOf()retourneert-1als er geen overeenkomst kan worden gevonden. -
Substring()retourneert alleen het opgegeven gedeelte van een tekenreeks, met behulp van een beginpositie en optionele lengte. - Er is vaak meer dan één manier om een probleem op te lossen. U hebt twee afzonderlijke technieken gebruikt om alle exemplaren van een bepaald teken of tekenreeks te vinden.
- Vermijd vastgelegde magic-waarden. Definieer in plaats daarvan een
constvariabele. De waarde van een constante variabele kan niet worden gewijzigd na initialisatie.
Uw kennis controleren
Feedback
Is deze pagina nuttig?
No
Hulp nodig bij dit onderwerp?
Wilt u Ask Learn gebruiken om iets te verduidelijken of u door dit onderwerp te leiden?