Operații cu șiruri de caractere
Unire de șiruri
Concatenarea șirurilor sau unirea poate fi realizată atât cu ajutorul operației +, cât și cu metoda Concat:
string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // rezultat: șirul "hello world"
string s4 = string.Concat(s3, "!!!"); // rezultat: șirul "hello world!!!"
Console.WriteLine(s4);
Metoda Concat este o metodă statică a clasei string, care primește ca parametri două șiruri. De asemenea, există și alte versiuni ale metodei care acceptă un număr diferit de parametri.
Pentru unirea șirurilor poate fi utilizată și metoda Join:
string s5 = "apple";
string s6 = "a day";
string s7 = "keeps";
string s8 = "a doctor";
string s9 = "away";
string[] values = new string[] { s5, s6, s7, s8, s9 };
string s10 = string.Join(" ", values);
Console.WriteLine(s10); // apple a day keeps a doctor away
Metoda Join este de asemenea statică. Versiunea utilizată mai sus primește doi parametri: un separator de șiruri (în acest caz, spațiu) și un tablou de șiruri care vor fi unite și separate de separator.
Compararea șirurilor
Pentru compararea șirurilor se folosește metoda statică Compare:
string s1 = "hello";
string s2 = "world";
int result = string.Compare(s1, s2);
if (result<0)
{
Console.WriteLine("Șirul s1 precede șirul s2");
}
else if (result > 0)
{
Console.WriteLine("Șirul s1 urmează șirului s2");
}
else
{
Console.WriteLine("Șirurile s1 și s2 sunt identice");
}
// rezultatul va fi "Șirul s1 precede șirul s2"
Această versiune a metodei Compare primește două șiruri și returnează un număr. Dacă primul șir este alfabetic înaintea celui de-al doilea, se returnează un număr negativ. În caz contrar, se returnează un număr pozitiv. Și al treilea caz - dacă șirurile sunt egale, se returnează 0.
În acest caz, deoarece caracterul h este alfabetic înaintea caracterului w, primul șir va fi înaintea celui de-al doilea.
Căutarea într-un șir
Cu ajutorul metodei IndexOf putem determina indexul primei apariții a unui caracter sau subșir într-un șir:
string s1 = "hello world";
char ch = 'o';
int indexOfChar = s1.IndexOf(ch); // egal cu 4
Console.WriteLine(indexOfChar);
string substring = "wor";
int indexOfSubstring = s1.IndexOf(substring); // egal cu 6
Console.WriteLine(indexOfSubstring);
În mod similar, funcționează metoda LastIndexOf, care găsește indexul ultimei apariții a unui caracter sau subșir într-un șir.
O altă grupă de metode permite verificarea dacă un șir începe sau se termină cu un anumit subșir. Pentru aceasta sunt destinate metodele StartsWith și EndsWith. De exemplu, într-un tablou de șiruri este stocată o listă de fișiere și trebuie să afișăm toate fișierele cu extensia exe:
var files = new string[]
{
"myapp.exe",
"forest.jpg",
"main.exe",
"book.pdf",
"river.png"
};
for (int i = 0; i < files.Length; i++)
{
if (files[i].EndsWith(".exe"))
Console.WriteLine(files[i]);
}
Divizarea șirurilor
Cu ajutorul funcției Split putem diviza un șir într-un tablou de subșiruri. Ca parametru, funcția Split primește un tablou de caractere sau șiruri care vor servi ca delimitatori. De exemplu, să numărăm câte cuvinte sunt într-un șir, divizându-l după caracterele de spațiu:
string text = "Și de aceea totul s-a întâmplat așa";
string[] words = text.Split(new char[] { ' ' });
foreach (string s in words)
{
Console.WriteLine(s);
}
Acesta nu este cel mai bun mod de a diviza după spații, deoarece în șirul de intrare ar putea fi mai multe spații consecutive și în rezultatul final ar apărea spații. Prin urmare, este mai bine să se utilizeze o altă versiune a metodei:
string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
Al doilea parametru, StringSplitOptions.RemoveEmptyEntries, indică eliminarea tuturor subșirurilor goale.
Tăierea șirurilor
Pentru a tăia caracterele de la începutul sau sfârșitul unui șir se folosește funcția Trim:
string text = " hello world ";
text = text.Trim(); // rezultat "hello world"
text = text.Trim(new char[] { 'd', 'h' }); // rezultat "ello worl"
Funcția Trim fără parametri taie spațiile de la începutul și sfârșitul șirului și returnează șirul tăiat. Pentru a specifica în mod explicit ce caractere de la începutul și sfârșitul șirului să fie tăiate, putem transmite funcției un tablou al acestor caractere.
Această funcție are analogi parțiali: funcția TrimStart taie caracterele de la început, iar funcția TrimEnd taie caracterele de la sfârșit.
Pentru a tăia o anumită parte a unui șir se folosește funcția Substring:
string text = "Zi bună";
// tăiem începând cu al treilea caracter
text = text.Substring(2);
// rezultat " bună"
Console.WriteLine(text);
// tăiem de la început până la ultimele două caractere
text = text.Substring(0, text.Length - 2);
// rezultat " zi bu"
Console.WriteLine(text);
Funcția Substring returnează de asemenea șirul tăiat. Ca parametru, prima versiune folosită aplică indexul de la care să se înceapă tăierea șirului. A doua versiune aplică doi parametri - indexul de început al tăierii și lungimea părții de șir tăiate.
Inserare
Pentru a insera un șir în alt șir se folosește funcția Insert:
string text = "Zi bună";
string substring = "minunată ";
text = text.Insert(3, substring);
Console.WriteLine(text); // Zi minunată bună
Primul parametru în funcția Insert este indexul la care se va insera subșirul, iar al doilea parametru este subșirul propriu-zis.
Ștergerea șirurilor
Pentru a șterge o parte a unui șir se folosește metoda Remove:
string text = "Zi bună";
// indexul ultimului caracter
int ind = text.Length - 1;
// tăiem ultimul caracter
text = text.Remove(ind);
Console.WriteLine(text); // Zi bun
// tăiem primele două caractere
text = text.Remove(0, 2);
Console.WriteLine(text); // bună
Prima versiune a metodei Remove primește indexul în șir de la care să înceapă ștergerea tuturor caracterelor. A doua versiune primește încă un parametru - câte caractere să fie șterse.
Înlocuire
Pentru a înlocui un caracter sau un subșir cu altul se folosește metoda Replace:
string text = "zi bună";
text = text.Replace("zi", "noapte");
Console.WriteLine(text); // noapte bună
text = text.Replace("o", "");
Console.WriteLine(text); // napte bună
În al doilea caz de utilizare a funcției Replace, șirul "o" este înlocuit cu un șir gol, adică este efectiv eliminat din text. În acest mod este ușor de eliminat un anumit text din șiruri.
Schimbarea registrului
Pentru a transforma un șir în majuscule sau minuscule se folosesc funcțiile ToUpper() și ToLower():
string hello = "Hello world!";
Console.WriteLine(hello.ToLower()); //hello world!
Console.WriteLine(hello.ToUpper()); // HELLO WORLD!