Friday, April 19, 2024 10:07

Cuprins >> Șiruri De Caractere Și Procesarea De Text > Divizarea unui șir după un separator

Divizarea unui șir după un separator

Există multe cazuri când avem un șir de caractere care conține câteva elemente separate printr-un separator și dorim să obținem aceste elemente. Pentru aceasta, putem folosi funcția Split(), care returnează un array de șiruri de caractere. Alternativa ar fi să căutăm manual caracterul separator utilizând funcția IndexOf(), apoi să extragem substring-urile individuale, și toată munca oribilă care vine cu acest proces.

Să luăm un exemplu:

Rezultatul va fi acesta:

C# Split

Ceea ce a făcut funcția Split() a fost să caute în interiorul șirului nostru pentru toate aparițiile caracterului ‘ ‘ (spațiu). Apoi, a împărțit șirul în mai multe șiruri de caractere, divizându-l oriunde a fost găsit acest caracter. În cele din urmă, a stocat toate substring-urile divizate în interiorul unui array, pe care îl putem itera pentru a afișa valorile sale, folosind o buclă de foreach.

Observați că unele dintre nume au o virgulă după ele. De asemenea, observați că am plasat parametrul pentru funcția Split() între apostrofuri și nu ghilimele. Aceast lucru specifică faptul că furnizăm un parametru de tip char, nu string. Și, într-adevăr, funcția Split() acceptă numai tipul char ca parametru. Dacă încercăm să adăugăm mai mult de un singur caracter, vom primi o eroare, deoarece un char poate conține doar un singur caracter. De asemenea, dacă încercăm să furnizăm un string în loc de un char, vom primi în continuare o eroare, deoarece nu există nicio supraîncărcare a funcției Split() care ia un string ca parametru. Deci, cum putem împărți un șir de caractere prin furnizarea mai multor caractere separatoare?

De data aceasta, am declarat un array de tip char cu unele valori, cum ar fi spațiu, virgulă etc. Funcția Split() are o supraîncărcare care acceptă un array de caractere și ne va împărți șirul prin acești separatori caractere existenți în array. Toate substring-urile care conțin spațiu, virgulă sau punct vor fi eliminate și stocate în array-ul de elemente. Dacă vom itera array-ul și vom afișa elementele unul câte unul, rezultatul va fi: „Ioana”, „”, „Ion”, „”, „Maria”, „” și „Vasile”. Obținem 7 rezultate, în loc de cele 4 așteptate. Motivul este acela că în timpul divizării textului, se găsesc trei substring-uri care conțin două caractere separatoare unul lângă celălalt (de exemplu o virgulă, urmată de un spațiu). În acest caz, șirul gol dintre cele două separatoare este de asemenea parte a rezultatului returnat. Dacă vrem să ignorăm șirurile goale din rezultatele divizării, o posibilă soluție este de a face verificări la afișarea lor:

Iar acum vom obține rezultatul corect:

Dar această abordare nu elimină string-urile goale din array. Pur și simplu nu le afișează. Deci, putem schimba argumentele pe care le furnizăm funcției Split(), oferindu-i o opțiune specială:

Acest lucru va asigura că array-ul rezultat nu va conține elemente goale.

Tags: , ,

Leave a Reply



Follow the white rabbit