Esercizio - Usare i metodi di supporto IndexOf() e Substring() della stringa
- 25 minuti
In questo esercizio si usa il IndexOf() metodo per individuare la posizione di una o più stringhe di caratteri all'interno di una stringa più grande. Utilizzare il Substring() metodo per restituire la parte della stringa più grande che segue le posizioni dei caratteri specificate.
Si utilizzerà anche una versione sovraccaricata del metodo Substring() per impostare la lunghezza dei caratteri da restituire dopo una posizione specificata in una stringa.
Preparare l'ambiente di scrittura del codice
Questo modulo include attività pratiche che illustrano il processo di compilazione ed esecuzione del codice dimostrativo. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità con la scrittura e l'esecuzione di codice in un ambiente di sviluppo usato dai professionisti in tutto il mondo.
Annotazioni
Se si sono completati altri moduli di Microsoft Learn in questa serie C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare la sezione seguente della procedura ed eliminare il codice nel file Project.cs usato per un esercizio precedente.
Apri Visual Studio Code.
Per aprire Visual Studio Code, è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.
Se si dispone di un percorso di cartella diverso in cui si conservano i progetti di codice, è possibile usare tale percorso. Per questo training, l'aspetto importante è avere una posizione facile da individuare e ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella.
Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code, selezionare Nuovo terminale.
Si noti che un prompt dei comandi nel pannello Terminale visualizza il percorso della cartella corrente. Per esempio:
C:\Users\someuser\Desktop>Al prompt dei comandi del terminale per creare una nuova applicazione console in una cartella specificata digitare dotnet new console -o ./CsharpProjects/TestProjects e quindi premere INVIO.
Questo comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso della cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Nel pannello Esplora, espandere la cartella CsharpProjects.
Verrà visualizzata la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
Nel pannello Esplora, per visualizzare il file di codice nel pannello dell'Editor, selezionare Program.cs.
Eliminare le righe di codice esistenti.
Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Scrivere codice per trovare coppie di parentesi incorporate in una stringa
Assicurarsi di avere aperto Visual Studio Code e che Program.cs sia visualizzato nel pannello Editor.
Annotazioni
Program.cs deve essere vuoto. In caso contrario, selezionare ed eliminare tutte le righe di codice.
Digitare il codice seguente nell'editor di 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);Nel menu File di Visual Studio Code, selezionare Salva.
Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.
Nel pannello ESPLORA RISORSE, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject, quindi scegliere Apri nel terminale integrato.
Verrà aperto un pannello del terminale con un prompt dei comandi che indica che il terminale è aperto al percorso della cartella TestProject.
Nel prompt dei comandi del terminale, digitare dotnet run per eseguire il codice, quindi premere INVIO.
Annotazioni
Se viene visualizzato un messaggio riportante: “Non è stato possibile trovare un progetto da eseguire”, assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Verrà visualizzato l'output seguente:
13 36In questo caso, l'indice del
(carattere è 13. Tenere presente che questi valori sono in base zero, quindi è il 14° carattere nella stringa. L'indice del)carattere è36.Ora che sono presenti i due indici, è possibile usarli come limiti per recuperare il valore tra di essi.
Aggiungere codice per recuperare il valore tra parentesi
Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
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));Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:
(inside the parenthesesIl
Substring()metodo richiede la posizione iniziale e il numero di caratteri, o lunghezza, da recuperare. Calcolare quindi la lunghezza in una variabile temporanea denominatalengthe passarla con ilopeningPositionvalore per recuperare la stringa all'interno della parentesi.Il risultato è quasi corretto, ma l'output include la parentesi di apertura. In questo esercizio l'inclusione delle parentesi non è desiderata. Per rimuovere la parentesi dall'output, è necessario aggiornare il codice per ignorare l'indice delle parentesi stesse.
Modificare la posizione iniziale della sottostringa
Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
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));Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:
inside the parenthesesPrenditi un momento per esaminare il codice precedente e la riga
openingPosition += 1;.Aumentando
openingPositiondi1, si ignora il carattere parentesi di apertura.Il motivo per cui si sta usando il valore
1è dovuto alla lunghezza del carattere. Se si tenta di individuare un valore a partire da una stringa più lunga,<div>ad esempio o---, si userà invece la lunghezza di tale stringa.Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
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));Prenditi un momento per esaminare il codice precedente e la riga
openingPosition += 6;.Il frammento di codice precedente mostra come trovare il valore all'interno di un tag di apertura e chiusura
<span>.In questo caso, si aggiunge
6aopeningPositioncome offset per calcolare la lunghezza della sottostringa.
Evitare valori magic
Le stringhe hardcoded come "<span>" nell'elenco di codice precedente sono note come "stringhe magiche" e i valori numerici hardcoded come 6 sono noti come "numeri magici". Questi valori "Magic" sono indesiderati per molti motivi e si dovrebbe cercare di evitarli, se possibile.
Esaminare il codice precedente per considerare come il codice potrebbe risultare danneggiato se la stringa
"<span>"fosse stata impostata come hardcoded più volte nel codice, ma fosse stata scritta in modo errato in un'istanza come"<sapn>".Il compilatore non intercetta
"<sapn>"in fase di compilazione perché il valore si trova in una stringa. L'ortografia causa problemi in fase di esecuzione e, a seconda della complessità del codice, potrebbe essere difficile tenere traccia.Inoltre, se modifichi la stringa
"<span>"in"<div>"più breve, ma dimentichi di modificare il numero6in5, il codice produce risultati indesiderati.Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:
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));Prenditi un minuto per esaminare il codice aggiornato e l'uso della parola chiave
constcome viene utilizzato inconst string openSpan = "<span>";.Il codice usa una costante con la
constparola chiave . Una costante consente di definire e inizializzare una variabile il cui valore non può mai essere modificato. Si userà quindi tale costante nel resto del codice ogni volta che è necessario tale valore. In questo modo si garantisce che il valore venga definito una sola volta e che eventuali errori di ortografia nella variabileconstvengano intercettati dal compilatore.L'elenco di codice precedente è un modo più sicuro per scrivere lo stesso codice esaminato nella sezione precedente. Ora, se il valore di
openSpanviene modificato in<div>, la riga di codice che usa laLengthproprietà continua a essere valida.
Riepilogo
Questa unità ha trattato molto materiale. Ecco le cose più importanti da ricordare:
-
IndexOf()fornisce la prima posizione di un carattere o di una stringa all'interno di un'altra stringa. -
IndexOf()restituisce-1se non riesce a trovare una corrispondenza. -
Substring()restituisce solo la parte specificata di una stringa, utilizzando una posizione iniziale e una lunghezza facoltativa. - Spesso c'è più di un modo per risolvere un problema. Sono state usate due tecniche separate per trovare tutte le istanze di un determinato carattere o stringa.
- Evitare valori magici codificati. Definire invece una
constvariabile. Il valore di una variabile costante non può essere modificato dopo l'inizializzazione.