Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

System.Text – operatii cu siruri de caractere

   Dezvoltatorii au nevoie foarte des de a procesa text pentru ca interactiunea aplicatiei cu utilizatorul se bazeaza  pe introducerea textului. Acesta trebuie sa fie validat, reformatat.

   O expresie regulata reprezinta un set de caractere care este comparat cu un string pentru a determina daca string-ul respectiv indeplineste cerintele unui anumit format. O expresie regulata mai poate fi utila in extragerea/inlocuirea unor portiuni de text. Exemplu: stringuri care au numere, siruri de caractere doar cu litere mici, siruri cu format hexadecimal.

   Exemplu: vom creea doua siruri de caractere (pe primul il vom considera expresie regulata) si vom determina daca primul sir de caractere se va potrivi cu al doilea sir de caractere.

   Construim cele doua siruri:

    Console.WriteLine("Expresia regulata:");
    string expresieRegulata = Console.ReadLine();
    Console.WriteLine("String pentru comparare:");
    string stringC = Console.ReadLine();

   Apelam metoda IsMatch din clasa Regex pentru a verifica daca cele doua siruri de caractere se potrivesc. Adaugam declaratia de utilizarea a spatiului de nume System.Text.RegularExpressions(link).

    if (Regex.IsMatch(stringC, expresieRegulata))
        Console.WriteLine("Potrivire!");
    else
        Console.WriteLine("Nepotrivire!");

   Functiei IsMatch ii mai putem adauga un parametru reprezentand o enumerare a optiunilor cu privire la modul in care se face potrivirea – RegexOptions(link).

   Consideram expresia regulata ^\d{5}$ . Aceasta inseamna ca stringul va trebui sa aiba fix 5 caractere ({5}) si acestea trebuie sa fie doar cifre (\d). Inceputul sirului de caractere este marcat de ^ si $ reprezinta sfarsitul sirului.

   Revenind la exemplul anterior, expresia regulata va fi:

    string expresieRegulata = "^\\d{5}$";

iar stringul care va fi comparat cu aceasta va fi compus din 5 numere.

   Expresiile regulate pot creea foarte multa confuzie, mai ales la citirea lor.:P Sunt foarte greu de utilizat daca nu sunt cunoscute bine, insa reprezinta o metoda eficienta in validarea informatiilor introduse de utilizator.

   Pentru mai multe informatii despre clasele care lucreaza cu expresii regulate, vizitati msdn.

   Fiecare sir de caractere dintr-un text este codificat folosind unul din standardele de codificare. De cele mai multe ori, acest lucru este facut automat de .Net Framework. Sunt situatii, cand este nevoie de a controla procesele de codificare si decodificare – interoperabilitatea cu sistemele UNIX care folosesc alte tehnici de codificare, citirea si scrierea fisierelor in alte limbi.

Codul ASCII este fundamentul pentru tipurile existente de codificare.

   .Net Framework utilizeaza Unicode UTF-16 pentru reprezentarea caracterelor. Formatul UNICODE furnizeaza pentru fiecare caracter cate un numar unic, indiferent de platforma, de program sau de limba.

   O lista cu standardele de codificare UNICODE poate fi gasita pe siteul unicode.org.

   Spatiul de nume System.Text contine clase pentru codificarea si decodificarea caracterelor.

Un exemplu de folosire a clasei Encoding este convertirea caracterelor in bytes, apoi codificarea acestora in Korean.

    // codificarea Korean
    Encoding codificare = Encoding.GetEncoding("Korean");
    // Convert ASCII bytes to Korean encoding
    //convertim bytes ASCII in Korean
    byte[] codat;
    codat = codificare.GetBytes("Test!");
    // afiseaza codurile bytes-urilor
    for (int i = 0; i < codat.Length; i++)
    Console.WriteLine("Byte {0}: {1}", i, codat[i]);

   Cand e nevoie de unirea, concatenarea sirurilor de caractere (stringuri) folosim clasa StringBuilder. Spre deosebire de tipul string, tipul stringBuilder poate fi schimbat fara a fi copiat. Aceasta clasa creeaza siruri de caractere dinamice (“mutable”) – sirurile de caractere “clasice” sunt immutable.

Exemplu:

    //creeam o instanta a clasei 
    StringBuilder stringBuilder = new StringBuilder();
    //apelam metoda de concatenare
    stringBuilder.Append("abc");

   Metoda Append adauga continutul argumentelor sale, fiecare argument avand apelata metoda toString.

   O metoda asemanatoare este AppendLine, cu diferenta ca aceasta va adauga o linie noua la sfarsit. Deci, urmatorul sir de caractere care va fi adaugat stringbuilder-ului va fi pe o linie noua.

    stringBuilder.AppendLine();

   Clasa StringBuilder are mai multi constructori. Astfel, putem construi o instanta a acesteia careia sa ii stabilim un string initial sau/si capacitatea stringbuilder-ului.

    StringBuilder sb = new StringBuilder("abc", 34);

sb va avea un string initial “abc” si nu va putea retine mai mult de 34 de caractere.

   Putem folosi proprietatile Capacity si MaxCapacity pentru setarea/afisarea numarului de caractere.

    //setam numarul maxim de caractere
    stringBuilder.Capacity = 20;
    //numarul maxim de caractere care poate fi
    //continut de instanta curenta
    Console.WriteLine(stringBuilder.Capacity);
    //capacitatea maxima 
    Console.WriteLine(stringBuilder.MaxCapacity);

   Capacitatea maxima este egala cu valoarea maxima a unui tip valoare int32 (int32.MaxValue). In cazul in care numarul de caractere depaseste aceasta valoare, vom primi exceptie de tipul ArgumentOutOfRangeException.

   Pentru a aduce modificari continutului stringbuilder-ului, se pot utiliza functiile Replace, Insert, Remove.

    //inlocuim caracterul a cu caracterul z
    stringBuilder.Replace('a', 'z');
    //dupa a patra pozite, va insera stringul BBB
    stringBuilder.Insert(4, "BBB");

    //eliminam de la pozitia 2 un element
    stringBuilder.Remove(2, 1);

   O varianta pentru clasa StringBuilder sunt vectorii de caractere, mult mai simpli. Pe acestia ii vom folosi atunci cand stim dimensiunea, marimea absoluta a stringului si avem operatii care nu includ iteratii.

   Folosita cu atentie, clasa StringBuilderpoate imbunatati performanta programului.

   Pentru toti membrii clasei StringBuilder, aflati mai multe detalii pe siteul Microsoft.

   Clasele care lucreaza cu expresiile regulate sunt organizate in spatiul de nume System.Text.RegularExpressions. Printre cele mai importante sunt: Regex, Match, MatchCollection, Capture.

   Clasa StringBuilder functioneaza ca un string, caruia ii putem atribui, inlocui, sterge caractere/siruri de caractere.

   Spatiul de nume System.Text contine clase care permit lucrul cu ASCII,Unicode, UTF-7, UTF-8, standarde de codificare.

   Detalii mai multe despre spatiul de nume System.Text pot fi gasite pe msdn.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*