Condividi tramite


Procedura: separare le stringhe con 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. Questo è spesso il metodo più semplice per separare una stringa in corrispondenza della fine delle parole. Viene usato anche per dividere le stringhe in corrispondenza di altri caratteri o di altre stringhe specifiche.

Nota

Gli esempi in C# in questo articolo vengono eseguiti nello strumento di esecuzione e playground per codice inline Try.NET. 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#.

Esempi di String.Split

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)
{
    System.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++)
{
    System.Console.WriteLine($"Index {i}: <{words[i]}>");
}

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)
{
    System.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.

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";
System.Console.WriteLine($"Original text: '{text}'");

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

foreach (var word in words)
{
    System.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";
System.Console.WriteLine($"Original text: '{text}'");

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

foreach (var word in words)
{
    System.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";
System.Console.WriteLine($"Original text: '{text}'");

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

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

Usare GitHub Copilot per suddividere una stringa

È possibile usare GitHub Copilot nell'IDE per generare codice per suddividere le stringhe usando String.Split in C#.

Se si usa Visual Studio 2022 versione 17.8 o successiva, è possibile provare il copilot di GitHub basato su intelligenza artificiale in Visual Studio per generare codice per suddividere una stringa di input in sottostringhe in base a uno o più delimitatori. Inviare la domanda e il codice da convertire come richiesta nella finestra di chat Copilot, come nell'esempio seguente. È anche possibile inviare richieste usando chat inline nella finestra dell'editor stessa.

Nota

GitHub Copilot è supportato dall'IA, quindi sono possibili sorprese ed errori. Assicurarsi di verificare il codice o i suggerimenti generati. Per maggiori informazioni sull'uso generale di GitHub Copilot, sull'impatto sul prodotto, sulla supervisione umana e sulla privacy, vedere le Domande frequenti su GitHub Copilot.

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

Generare codice C# per usare Split.String suddividere una stringa in sottostringhe. La stringa di input è "Si vince un po'. Perdi un po'. I delimitatori sono spazi e punti. Fornire un output di esempio.

È possibile personalizzare il prompt per usare stringhe e delimitatori in base alle esigenze.

È possibile usare funzionalità di chat, ad esempio comandi barra, riferimenti a file, metodi, classi o thread, per impostare la finalità e ottenere risposte migliori con il contesto con ambito. Per un file esistente aperto nell'IDE, è possibile richiedere a GitHub Copilot di usare la chat inline con /generate code to split string1 in #Filename by delimiter spaces.

L'output seguente mostra un esempio di risposta Copilot Chat:

Here is an example of how you can use the Split method in C# to split the string "You win some. You lose some." using space and period as delimiters:

using System;

class Program
{
    static void Main()
    {
        string input = "You win some. You lose some.";
        char[] delimiters = new char[] { ' ', '.' };
        string[] substrings = input.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

        foreach (string substring in substrings)
        {
            Console.WriteLine(substring);
        }
    }
}

**Example Output**
You
win
some
You
lose
some

Quando Copilot restituisce un blocco di codice, la risposta include opzioni per copiare il codice, inserire il codice in un nuovo file o visualizzare in anteprima l'output del codice.

Nota

I risultati potrebbero essere diversi da quanto illustrato nelle risposte di esempio. I modelli di IA non sono deterministici, il che significa che possono restituire risposte diverse quando viene posta la stessa domanda. Questo potrebbe essere dovuto ad apprendimento e adattamento aggiuntivo nel tempo, alla variazione della lingua, ai cambiamenti nel contesto, ad esempio alla cronologia delle chat e altro ancora.

Screenshot che mostra l'uso di GitHub Copilot Chat in Visual Studio per suddividere una stringa in sottostringhe.

Per altre informazioni, vedi:

Vedi anche