Методе за рад са стринговима

Као што је поменуто у претходној лекцији, класа String садржи велики број метода које омогућавају рад са стринговима – претраживање, издвајање делова текста, конверзију у велика или мала слова, замену подстрингова, уклањање белина и друге трансформације.

Методе не мењају оригинални стринг, већ враћају нови. Подсети се, када се стринг измени (нпр. дода му се карактер), у позадини се креира нова инстанца класе String, а стара се оставља за сакупљача отпада. Ово је важно знати због перформанси – у случајевима када се стрингови интензивно мењају у петљама, препоручује се коришћење класе StringBuilder.

Иако је string референтни тип у програмском језику C#, он се понаша као да је вредносни у многим ситуацијама. То је зато што је string имутaбилан (енгл. immutable) – свака измена ствара нови објекат у меморији.

У овој лекцији биће представљене најчешће коришћене методе класе String.

ToUpper() и ToLower()

Конвертују сва слова у велика или мала.

string tekst = "Програмирање";
string malaSlova = tekst.ToLower(); // "програмирање"
string velikaSlova = tekst.ToUpper(); // "ПРОГРАМИРАЊЕ"

Trim(), TrimStart(), TrimEnd()

Уклањају празнине (или друге наведене карактере) са почетка и/или краја стринга.

string unos = "  тест  ";
string obradjeno = unos.Trim(); // "тест"

Substring(int startIndex, int length)

Издваја део стринга дате дужине, почевши од дате позиције.

string tekst = "Програмирање";
string deo = tekst.Substring(0, 4); // "Прог"

IndexOf() и LastIndexOf()

Проналазе позицију првог или последњег појављивања карактера или подстринга.

string tekst = "Програм";
int pozicija = tekst.IndexOf("г"); // 3

Contains()

Проверава да ли стринг садржи дати подстринг.

bool ima = tekst.Contains("рам"); // true

Replace(oldValue, newValue)

Мења сва појављивања једног подстринга другим.

string novaVerzija = tekst.Replace("ра", "РА"); // "ПрогРАмирање"

StartsWith() и EndsWith()

Проверавају да ли стринг почиње или се завршава одређеним подстрингом.

bool pocinje = tekst.StartsWith("Прог"); // true
bool zavrsava = tekst.EndsWith("ње"); // true

Split()

Дели стринг у низ стрингова, према наведеном раздвајачу.

string linija = "име,презиме,разред";
string[] podaci = linija.Split(',');
// podaci[0] = "име", podaci[1] = "презиме", podaci[2] = "разред"

Join()

Супротно од Split() – спаја низ стрингова у један, користећи дати раздвајач.

string rezultat = string.Join(" - ", podaci);
// "име - презиме - разред"

Поређење стрингова: оператор или метода?

У C#-у можеш да поредиш стрингове оператором == или методом Equals(). Оба приступа упоређују вредност (садржај) стринга, за разлику од језика C, где == упоређује адресе (показиваче), а не садржај низа карактера.

string a = "test";
string b = "test";

Console.WriteLine(a == b);         // True
Console.WriteLine(a.Equals(b));    // True

У програмском језику C се за поређење стрингова користи функција strcmp(), јер == упоређује адресе у меморији:

char *a = "test";
char *b = "test";
if (strcmp(a, b) == 0)
    printf("Jednaki su.\n");

У C#-у, оба начина упоређују садржај, али Equals() омогућава и „културно осетљива” поређења и поређења са додатним опцијама (StringComparison).

Методе класе String омогућавају једноставну и ефикасну обраду текстуалних података. У реалним апликацијама, манипулација стринговима је честа потреба – од валидирања уноса до анализе података. У наредној лекцији биће представљена моћна техника рада са стринговима – регуларни изрази, који омогућавају прецизно дефинисање шаблона за претрагу и проверу текста.