1. Introduzione
Nella pratica, i task più comuni con le stringhe sono questi:
- Ottenere la lunghezza della stringa (e capire se è vuota).
- Cambiare il case delle lettere (tutto MAIUSCOLO o tutto minuscolo).
- Verificare se la stringa contiene una parola o un carattere specifico.
- Sostituire una "parola brutta" con una più carina.
- Dividere la stringa in parti usando un separatore ("lista di telefoni separati da virgola").
- Togliere gli spazi all'inizio e alla fine della stringa.
- Estrarre una parte della stringa (tipo le prime 3 lettere del cognome).
- Confrontare due stringhe — sono uguali se ignoro il case?
Per ognuno di questi task, la classe string ha il suo metodo.
Tabella dei metodi chiave
| Operazione | Metodo/Proprietà | Esempio |
|---|---|---|
| Lunghezza della stringa | |
|
| Primo carattere | |
|
| Ultimo carattere | |
|
| In minuscolo | |
|
| In maiuscolo | |
|
| Verificare se contiene sottostringa | |
|
| Posizione della sottostringa | |
|
| Estrarre parte della stringa | |
|
| Confrontare stringhe | |
|
| Togliere spazi | |
|
| Dividere per separatore | |
|
| Unire array in una stringa | |
|
| Sostituire parte | |
|
| Stringa vuota? | |
|
Oggi ne vediamo alcuni insieme.
2. Lavorare con la stringa come con un array
Lunghezza della stringa: proprietà Length
La cosa più semplice — scoprire quanti caratteri ci sono in una stringa. Per questo usiamo la proprietà Length. Esempio:
string name = "Arkadiy";
Console.WriteLine(name.Length); // Mostra: 7
- Length è una proprietà (non un metodo), quindi niente parentesi.
- Se la stringa è vuota (""), la lunghezza sarà 0.
A volte è utile controllare la lunghezza della stringa prima di fare qualcosa di "rischioso" (tipo prendere una sottostringa).
Ottenere un carattere per indice: indicizzatore [i]
Come con gli array: una stringa è un array di caratteri. Esempio:
string hello = "Privet";
char firstChar = hello[0]; // 'P'
char lastChar = hello[^1]; // 't'
Console.WriteLine(firstChar);
- L'indicizzazione parte da zero!
- Attenzione: se provi ad accedere a un indice che non esiste (hello[100]), ti becchi un'eccezione.
3. Confronto tra stringhe
Operatori == e != sulle stringhe
In C#, questi operatori confrontano semplicemente due stringhe per contenuto.
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
Metodo Equals
A differenza dell'operatore ==, il metodo Equals può prendere parametri. Per esempio, puoi confrontare stringhe ignorando il case — quando "Mama" == "mama" e anche "MAMA". Esempio:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// confronto standard con distinzione tra maiuscole/minuscole
bool isSame = pass1.Equals(pass2); // false
// confronto senza distinzione tra maiuscole/minuscole
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. Cambiare il case
Per trasformare una stringa in maiuscolo (o minuscolo), la classe string ha 2 metodi speciali: ToLower() e ToUpper().
Vuoi che l'utente veda il tuo messaggio in stile "IMPORTANTE!"? O magari vuoi portare tutti i nomi in minuscolo per confrontarli? Facile:
string text = "Mne Ne Strashen Seryy Volk!";
Console.WriteLine(text.ToUpper()); // MNE NE STRASHEN SERYI VOLK!
Console.WriteLine(text.ToLower()); // mne ne strashen seryi volk!
- Nota: la stringa originale non cambia!
- Puoi usarlo per confrontare stringhe senza badare al case.
5. Togliere gli spazi inutili
E se l'utente per sbaglio (o apposta, vai a sapere) mette spazi prima o dopo il nome? Trim ti salva! Esiste in tre versioni:
- Trim — toglie tutti gli spazi all'inizio e alla fine della stringa;
- TrimStart — toglie gli spazi solo all'inizio;
- TrimEnd — toglie gli spazi solo alla fine.
string raw = " Gosha ";
string cleaned = raw.Trim(); // "Gosha"
Console.WriteLine($"[{cleaned}]");
6. Ottenere una sottostringa: Substring
A volte serve estrarre solo una parte della stringa.
string word = "Privet";
string part = word.Substring(2); // "ivet"
string part2 = word.Substring(2, 3); // "ive"
- Substring(startIndex) — dal carattere startIndex fino alla fine.
- Substring(startIndex, length) — a partire da startIndex per tanti caratteri quanti length.
Attenzione: se vai fuori dai limiti della stringa o length < 0, ti becchi un'eccezione!
7. Controllare se la stringa è vuota
Prima di usare una stringa (tipo in interpolazione), meglio controllare che non sia null e non sia vuota, altrimenti rischi errori o risultati strani.
a) Controllo di null con l'operatore ==
string s = null;
if (s == null)
Console.WriteLine("La stringa è null");
Contro: non becca la stringa vuota ("").
b) Controllo con string.IsNullOrEmpty()
Controlla sia null che la stringa vuota:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("La stringa è vuota o null");
c) Controllo con string.IsNullOrWhiteSpace()
In più considera anche le stringhe fatte solo di spazi, tab e altri caratteri “invisibili”:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("La stringa è vuota, null o solo di spazi");
8. Errori tipici con i metodi delle stringhe
- Il più comune — dimenticare che le stringhe sono immutabili (immutable), come abbiamo già visto sopra.
- Un altro errore popolare — dimenticare la distinzione tra maiuscole/minuscole quando cerchi o confronti.
Per esempio, se l'utente inserisce il nome "andrey", ma nella lista c'è già "Andrey", usare semplicemente Contains o == potrebbe non funzionare, se non porti entrambe le stringhe allo stesso case o non usi la versione giusta del metodo.
Occhio anche ai metodi che restituiscono indici. Gli indici partono da zero, e se ti torna -1, vuol dire che non ha trovato niente, non che è "indice 0".
GO TO FULL VERSION