Stringhe

Manipolazione del testo

ITT Fauser — Classi quarte

📝

Parte 1: Stringhe

Testo, caratteri e manipolazione in C#

Cos'è una stringa?

In C# una stringa è una sequenza di caratteri Unicode racchiusa tra virgolette doppie.

string saluto = "Ciao, mondo!";
string vuota  = "";           // stringa vuota
string nulla  = null;         // riferimento nullo
L'immutabilità è una scelta progettuale: rende le stringhe sicure da condividere tra più parti del programma senza rischio di modifiche accidentali.

Costruire stringhe

Interpolazione consigliata

Il prefisso $ permette di inserire espressioni direttamente nel testo tra parentesi graffe.

string nome = "Alice";
int    eta  = 20;

string msg = $"Mi chiamo {nome}
  e ho {eta} anni.";
// "Mi chiamo Alice e ho 20 anni."

Concatenazione con +

Semplice ma inefficiente in loop: ogni + crea un nuovo oggetto in memoria.

string msg = "Mi chiamo "
    + nome
    + " e ho "
    + eta
    + " anni.";
Evitare la concatenazione con + all'interno di cicli: per costruire stringhe incrementalmente usare StringBuilder (lo vedremo tra poco).

Proprietà e metodi principali

MembroDescrizione
.LengthNumero di caratteri nella stringa
.ToUpper()Converte tutti i caratteri in maiuscolo
.ToLower()Converte tutti i caratteri in minuscolo
.Trim()Rimuove spazi (e newline) iniziali e finali
.Contains(s)Restituisce true se la sottostringa s è presente
.Replace(old, new)Sostituisce tutte le occorrenze di old con new
.Substring(i, n)Estrae n caratteri a partire dall'indice i
.IndexOf(s)Indice della prima occorrenza di s (-1 se assente)
.Split(sep)Divide la stringa in un array usando sep come separatore
string.Join(sep, arr)Unisce gli elementi di arr con il separatore sep

Metodi in pratica

string frase = "  Ciao, Mondo!  ";

Console.WriteLine(frase.Trim());              // "Ciao, Mondo!"
Console.WriteLine(frase.Trim().ToLower());    // "ciao, mondo!"
Console.WriteLine(frase.Trim().Length);       // 12
Console.WriteLine(frase.Contains("Mondo"));   // True
Console.WriteLine(frase.Replace("Mondo", "C#")); // "  Ciao, C#!  "

string parte = "abcdefgh";
Console.WriteLine(parte.Substring(2, 4));  // "cdef"
Console.WriteLine(parte.IndexOf("de"));     // 3
I metodi possono essere concatenati: frase.Trim().ToLower() prima elimina gli spazi, poi converte in minuscolo. Ogni metodo restituisce una nuova stringa.

Split e Join

Split e Join permettono di convertire una stringa in array e viceversa: molto utili per elaborare dati in formato CSV o percorsi di file.

string csv = "mela,pera,banana,kiwi";

// Split: da stringa ad array
string[] frutti = csv.Split(',');
foreach (string f in frutti)
    Console.WriteLine(f);     // mela / pera / banana / kiwi

// Join: da array a stringa
string lista = string.Join(" - ", frutti);
Console.WriteLine(lista);   // mela - pera - banana - kiwi
"mela,pera,banana"
→ Split(',') →
["mela","pera","banana"]
→ Join(" - ") →
"mela - pera - banana"

StringBuilder: concatenazioni efficienti

Quando occorre costruire una stringa con molte operazioni (ad esempio in un ciclo), StringBuilder lavora su un buffer interno ed è molto più efficiente del +.

using System.Text;

StringBuilder sb = new StringBuilder();

for (int i = 1; i <= 5; i++)
{
    sb.Append($"riga {i}\n");
}

string risultato = sb.ToString();
Console.WriteLine(risultato);

Metodi utili

  • .Append(s) — aggiunge in fondo
  • .AppendLine(s) — aggiunge con a capo
  • .Insert(i, s) — inserisce in posizione
  • .ToString() — converte in string
Con 10 000 concatenazioni via + si creano 10 000 oggetti temporanei. StringBuilder ne crea uno solo.