Condividi tramite


Come separare le stringhe utilizzando String.Split in C#

Il metodo String.Split crea una matrice di sottostringhe dividendo la stringa di input in base a uno o più delimitatori. Spesso, questo metodo è il più semplice per separare una stringa ai confini delle parole.

Nota

Gli esempi in C# in questo articolo vengono eseguiti con il runner di codice inline Try.NET e il relativo ambiente di prova. Selezionare il pulsante Esegui per eseguire un esempio in una finestra interattiva. Dopo aver eseguito il codice, è possibile modificarlo ed eseguire il codice modificato selezionando di nuovo Esegui. Il codice modificato viene eseguito nella finestra interattiva o, se la compilazione non riesce, la finestra interattiva visualizza tutti i messaggi di errore del compilatore C#.

Suggerimento

È possibile usare l'assistenza di intelligenza artificiale per suddividere una stringa.

Dividere una stringa in parole

Il codice seguente divide una frase comune in una matrice di stringhe per ogni parola.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

Ogni istanza di un carattere separatore genera un valore nella matrice restituita. Poiché gli array in C# sono indicizzati a zero, ogni stringa della matrice viene indicizzata da 0 al valore restituito dalla proprietà Array.Length meno 1:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}

ha String.Split molti overload. Questi overload personalizzano il comportamento per la suddivisione delle stringhe:

  • È possibile specificare separatori come char valori o string valori.
  • È possibile specificare un separatore o più separatori. Se si specificano più separatori, devono essere tutti dello stesso tipo ( char o string).
  • È possibile specificare il numero massimo di sottostringhe da restituire.
  • È possibile specificare se i caratteri separatori ripetuti vengono ignorati o producono sottostringhe vuote nel valore restituito.
  • È possibile specificare se gli spazi vuoti iniziali e finali vengono rimossi dalle sottostringhe restituite.

Gli esempi rimanenti usano sovraccarichi diversi per mostrare ciascuno dei questi comportamenti.

Specificare più separatori

String.Split può usare più caratteri separatori. L'esempio seguente usa spazi, virgole, punti, due punti e tabulazioni come caratteri di separazione, che vengono passati a Split in una matrice. Il ciclo nella parte inferiore del codice visualizza ogni parola nella matrice restituita.

char[] delimiterChars = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

Istanze consecutive di un separatore generano una stringa vuota nella matrice di output:

char[] delimiterChars = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

String.Split può accettare una matrice di stringhe (sequenze di caratteri, anziché caratteri singoli, con la funzione di separatori per l'analisi della stringa di destinazione).

string[] separatingStrings = ["<<", "..."];

string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separatingStrings, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    Console.WriteLine(word);
}

Limitare le dimensioni dell'output

Nell'esempio seguente viene illustrato come limitare l'output alle prime quattro sottostringhe nella stringa di origine.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

Rimuovere sottostringhe vuote

Caratteri separatori consecutivi generano una stringa vuota come valore nella matrice restituita. È possibile vedere come viene creata una stringa vuota nell'esempio seguente, che usa lo spazio come separatore.

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

Questo comportamento semplifica l'uso di alcuni formati, ad esempio dei file con valori delimitati da virgole (CSV, Comma Separated Value) che rappresentano dati tabulari. Due virgole consecutive rappresentano una colonna vuota.

È possibile passare un parametro StringSplitOptions.RemoveEmptyEntries facoltativo per escludere tutte le stringhe vuote nella matrice restituita. Per un'elaborazione più complessa della raccolta restituita, è possibile modificare la sequenza di risultati tramite LINQ.

Tagliare gli spazi vuoti

L'esempio seguente mostra l'effetto della riduzione delle voci:

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] words = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
words = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

Le voci non tagliate hanno spazi bianchi aggiuntivi prima dei numerali.

Usare l'intelligenza artificiale per suddividere una stringa

È possibile usare gli strumenti di intelligenza artificiale, ad esempio GitHub Copilot, per generare codice per suddividere le stringhe usando String.Split in C#. È possibile personalizzare il prompt per usare stringhe e delimitatori in base alle esigenze.

Il testo seguente mostra un esempio di richiesta di chat di Copilot:

Generate C# code to use Split.String to split a string into substrings.
Input string is "You win some. You lose some." Delimiters are space and period.
Provide example output.

GitHub Copilot è supportato dall'IA, quindi sono possibili sorprese ed errori. Per altre informazioni, vedere domande frequenti su Copilot.

Vedi anche