Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo articolo fa parte della sezione Nozioni fondamentali per gli sviluppatori che già conoscono almeno un linguaggio di programmazione e stanno imparando C#. Se non si ha familiarità con la programmazione, iniziare prima con le esercitazioni introduttive .
Provieni da un altro linguaggio?string.Split è la controparte in C# di String.split in Java e di String.prototype.split in JavaScript. A differenza di questi linguaggi, C# restituisce una matrice (string[]), non un elenco e l'argomento separatore è un carattere o una stringa, non un'espressione regolare. Per la suddivisione basata su criteri, vedere Regex.Split.
Il String.Split metodo suddivide una stringa in una matrice di sottostringhe usando uno o più separatori. È il modo più semplice per analizzare testo delimitato, ad esempio parole, valori in stile CSV o token di protocollo.
Il metodo ha molti overload, ma riguardano quattro decisioni indipendenti:
-
Separatori: uno
char, una matrice dichar, unastringo una matrice distring. - Numero massimo di risultati: limite del numero di sottostringhe restituite.
- Gestione degli elementi vuoti: mantenere le sottostringhe vuote (impostazione predefinita) oppure ometterle con StringSplitOptions.RemoveEmptyEntries.
- Gestione degli spazi vuoti: tagliare gli spazi vuoti iniziali e finali da ogni voce con StringSplitOptions.TrimEntries.
Dividere una stringa in parole
Per dividere una frase negli spazi vuoti, passare ' ' 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}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>
Scorrere la matrice restituita con for per recuperare la posizione di ogni parola:
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]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...
Se l'input contiene occorrenze ripetute del carattere separatore, Split produce elementi vuoti, uno per ogni "intervallo" tra separatori consecutivi:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...
Usa StringSplitOptions.RemoveEmptyEntries per eliminare gli elementi vuoti, come illustrato più avanti in questo articolo.
Suddividi in base a più caratteri separatori
Quando più di un carattere può fungere da separatore, passali come un array. L'esempio seguente considera spazi, virgole, punti, due punti e tabulazioni tutti come delimitatori di parola:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>
I separatori adiacenti producono ancora elementi vuoti:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>
Suddivisione su separatori composti da più caratteri
Per suddividere usando separatori costituiti da parole intere o da più caratteri, passare un array di stringhe. Gli overload di array di stringhe richiedono un valore StringSplitOptions. Usare RemoveEmptyEntries quando i separatori ripetuti generano in caso contrario risultati vuoti:
string[] separators = ["<<", "..."];
string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");
foreach (var word in words)
{
Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four
Limitare il numero di sottostringhe restituite
Passa l'argomento count per limitare il numero di risultati. La voce finale contiene tutto ciò che resta, inclusi eventuali separatori residui:
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}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>
Questo modello è utile per key=value le coppie e altri formati in cui solo il primo separatore è significativo.
Rimuovi gli spazi vuoti da ogni voce
StringSplitOptions.TrimEntries rimuove spazi vuoti iniziali e finali da ogni sottostringa restituita. È possibile combinarlo con RemoveEmptyEntries per la pulizia tipica in stile CSV:
string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);
Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
Console.WriteLine($"<{word}>");
}
string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>
Usare espressioni regolari
Split funziona bene per delimitatori di caratteri o stringhe fissi. Per la suddivisione basata su pattern, utilizzare Regex.Split. Per un'introduzione alle espressioni regolari sulle stringhe, vedere Operazioni sulle stringhe.