Ce face String.Split / String.Join
Metodele Split (metodă de instanță pe string) și string.Join (metodă statică pe clasa String) formează perechea fundamentală pentru parsarea și serializarea textelor delimitate (linii CSV, liste de etichete, căi URL sau parametri din fișiere de configurare).
Începând cu .NET 5, enumerarea StringSplitOptions permite combinarea pe biți a opțiunilor RemoveEmptyEntries (elimină elementele goale rezultate din delimitatori consecutivi) și TrimEntries (elimină automat spațiile albe de la începutul și sfârșitul fiecărui element rezultat), eliminând nevoia unui apel suplimentar .Select(s => s.Trim()). La polul opus, string.Join acceptă orice colecție IEnumerable<T> sau tablou și concatenează eficient elementele într-un singur șir.
Parametri, metode și opțiuni
| Parametru / Metodă | Descriere |
|---|---|
text.Split(char sep, StringSplitOptions opts) |
Împarte șirul după caracterul sep, aplicând opțiunile de filtrare și curățare a spațiilor. |
text.Split(char[]? sep, int count, opts) |
Împarte șirul după oricare dintre caracterele din tablou, limitând rezultatul la cel mult count sub-șiruri. |
StringSplitOptions.RemoveEmptyEntries |
Exclude din tabloul returnat șirurile goale "". |
StringSplitOptions.TrimEntries |
Aplică automat Trim() pe fiecare fragment înainte de a verifica dacă este gol (.NET 5+). |
string.Join(string? sep, IEnumerable<T> values) |
Concatenează toate elementele colecției values, inserând șirul sep între ele. |
Exemple
Exemplul 1: Parsarea curată a unei liste de etichete cu RemoveEmptyEntries | TrimEntries
Combinăm ambele steaguri din StringSplitOptions pentru a curăța dintr-un singur pas un text introdus neuniform de utilizator.
string inputBrut = " csharp , dotnet8, , aspnetcore ; linq , ";
string[] etichete = inputBrut.Split(
new[] { ',', ';' },
StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries
);
Console.WriteLine($"Număr etichete: {etichete.Length}");
Console.WriteLine("Formatat: " + string.Join(" | ", etichete));
Ieșire în consolă
Număr etichete: 4
Formatat: csharp | dotnet8 | aspnetcore | linq
Exemplul 2: Împărțirea unei perechi cheie=valoare în maximum 2 părți
Când valoarea unei setări poate conține la rândul ei caracterul = (de exemplu într-un connection string), parametrul count: 2 garantează că împărțirea se face doar la primul semn =.
string linieConfig = "ConnectionString=Server=localhost;Database=Magazin;Uid=app;";
string[] pereche = linieConfig.Split('=', count: 2, StringSplitOptions.TrimEntries);
Console.WriteLine($"Cheie: {pereche[0]}");
Console.WriteLine($"Valoare: {pereche[1]}");
Ieșire în consolă
Cheie: ConnectionString
Valoare: Server=localhost;Database=Magazin;Uid=app;
Greșeli frecvente
- Apelarea
text.Split()fără parametri pe un șir cu spații multiple fărăRemoveEmptyEntries— fiecare două spații alăturate vor produce câte un element""(șir gol) în tabloul rezultat. - Folosirea unei bucle
foreachcu concatenarerezultat += elem + ", "în loc destring.Join(", ", colectie)— pe lângă alocările inutile de memorie, concatenarea manuală lasă o virgulă în plus la sfârșitul șirului.
Funcții și concepte înrudite
Replace, Trim și Substring: Curăță spațiile de la capete, înlocuiește fragmente de text și extrage sub-șiruri prin Substring sau operatorul de interval (..).Contains, StartsWith și EndsWith: Verifică dacă un șir conține, începe sau se termină cu un anumit sub-șir și găsește poziția acestuia cu IndexOf.StringBuilder: Construiește și modifică eficient șiruri de caractere într-un buffer mutabil, fără a aloca obiecte intermediare în bucle.Array și Span<T>: Lucrează cu blocuri contigue de memorie și felii (slices) de înaltă performanță fără alocări suplimentare pe heap.