Operacje na tekstach. Część 2
Wybrane metody klasy String
Klasa String zawiera szereg pól i metod służących do udostępniania informacji o tekście z możliwością wykonywania prostych i złożonych operacji na tekście. Jedne z częściej używanych metod to
- Substring()- metoda pobiera fragment tekstu począwszy od podanego indeksu a skończywszy na ilości podanych znaków do pobrania; wywołanie to tekst.Substring(id, ile)
- Compare()- metoda porównuje dwa teksty, jeżeli oba teksty są jednakowe to wynikiem jest 0 (zero), gdy teksty różnią się od siebie zwracana jest liczba różna od zero; wynik mniejszy od zera (-1), oznacza, że tekst pierwszy w porządku alfabetycznym jest mniejszy od drugiego; wynik większy od zera oznacza, że tekst pierwszy w porządku alfabetycznym jest większy od drugiego; metoda może być wywołana w kilku wariantach, proste wywołanie tej metody odpowiada operatorowi równości (czyli: ==); wywołanie to String.Compare(tekst1, tekst2)
- Concat()- metoda łączy dwa teksty w jeden, wywołanie to String.Concat(tekst1, tekst2)
- IndexOf()- metoda sprawdza czy podany fragment tekstu zwiera się w tekście źródłowym, zwracany wynik to indeks znaku, od którego rozpoczyna się pierwsze wystąpienie poszukiwanego tekstu, wynik mniejszy od zera oznacza, że szukany fragment tekstu nie występuje w źródle
- LastIndexOf()- metoda działa jak powyższa (IndexOf) ale sprawdza od końca
- Insert()- metoda wstawia fragment tekstu do tekstu źródłowego począwszy od wskazanego indeksu; wywołanie string nowy=tekst.Insert(id,fragment_tekstu);
- Remove()- metoda usuwa fragment tekstu od wskazanego indeksu poprzez wycięci podanej ilości znaków; wywołanie string nowy=tekst.Remove(id,ile_znakow);
Informacje o pozostałych częściej używanych metod tej klasy, takie jak ToLower(), ToUpper(), Trim(), Join() odszukaj samodzielnie i zapisz w zeszycie.
Zadania
Zad. 1
Używając metody Substring() wytnij z tekstu źródłowego zadaną ilość znaków zaczynając od wskazanego indeksu. Wynik wyświetl na ekranie. Zadanie zrealizuj jako dwie aplikacje- desktopowa oraz konsolowa.
Wynik działania aplikacji desktopowej
![metody Substring() Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-1.webp)
Przykładowy kod funkcji realizujący tę część zadania
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
//wytnij teskt
string tekst_zrodlo = textBox1.Text;
int id = int.Parse(textBox2.Text);
int ile= int.Parse(textBox3.Text);
string tekst_wyciety = tekst_zrodlo.Substring(id, ile);
MessageBox.Show("Wycięty fragment tekstu: " +
Environment.NewLine + tekst_wyciety,
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Wynik działania aplikacji konsolowej
![Substring() Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-2.webp)
Przykładowy kod funkcji realizujący tę część zadania w rozwiązaniu konsolowym
Wskazówka:
static void Zadanie1()
{
Console.WriteLine("Wprowadź teskt źródłowy");
string tekst_zrodlo = Console.ReadLine();
Console.WriteLine("Podaj indeks początku wycinania: ");
int id = int.Parse(Console.ReadLine());
Console.WriteLine("Podaj ilość znaków do wycięcia: ");
int ile = int.Parse(Console.ReadLine());
string tekst_wyciety = tekst_zrodlo.Substring(id, ile);
Console.WriteLine("Wyciety fragment tekstu to: ");
Console.WriteLine(tekst_wyciety);
}
Zad. 2
Napisz funkcję, która porówna ze sobą dwa imiona i odpowie na pytanie: które imię w porządku alfabetycznym jest pierwsze. Zadanie rozwiąż jako aplikacja desktopowa i konsolowa.
Przykładowy wynik działania aplikacji desktopowej
![String.Compare Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-3.webp)
W proponowanym rozwiązaniu wykorzystałem odczyt kolejnej linii kontrolki TextBox pracującej w trybie Multiline. Można wykorzystać dwie różne kolejne kontrolki TextBox specjalnie dedykowane do wprowadzania imion.
Przykładowy kod funkcji realizujący tę część zadania
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
int ileLinii = textBox1.Lines.Length;
if(ileLinii > 1 )
{
string imieA = textBox1.Lines[0];
string imieB = textBox1.Lines[1];
int wynikPorownania = String.Compare(imieA, imieB);
string trescKomunikatu = null;
switch(wynikPorownania)
{
case -1:
trescKomunikatu = "Imię "+
imieA+
" jest w alfabecie przed imieniem "+
imieB;
break;
case 0:
trescKomunikatu = "Imię " +
imieA +
" jest równe imieniu " +
imieB;
break;
case 1:
trescKomunikatu = "Imię " +
imieA +
" jest w alfabecie po imieniu " +
imieB;
break;
}
MessageBox.Show(trescKomunikatu,
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
Wynik działania aplikacji konsolowej
![String.Compare konsola Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-4.webp)
Przykładowy kod funkcji porównujący imiona w porządku alfabetycznym w rozwiązaniu konsolowym
Wskazówka:
static void Zadanie2()
{
Console.WriteLine("Wprowadź pierwsze imię ");
string imieA = Console.ReadLine();
Console.WriteLine("Wprowadź drugie imię ");
string imieB = Console.ReadLine();
int wynikPorownania = String.Compare(imieA, imieB);
string trescKomunikatu = null;
switch (wynikPorownania)
{
case -1:
trescKomunikatu = "Imię " +
imieA +
" jest w alfabecie przed imieniem " +
imieB;
break;
case 0:
trescKomunikatu = "Imię " +
imieA +
" jest równe imieniu " +
imieB;
break;
case 1:
trescKomunikatu = "Imię " +
imieA +
" jest w alfabecie po imieniu " +
imieB;
break;
}
Console.WriteLine(trescKomunikatu);
}
Zad. 3
Sprawdź czy w podanym tekście źródłowym znajduje się dowolny ciąg znaków. Jeśli wystąpi to podaj indeks pierwszego wystąpienia podanego ciągu znaków. Wskazówka, użyj metody IndexOf() klasy String.
Przykład działania aplikacji desktopowej
![IndexOf Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-5.webp)
Kod realizujący to zadanie
Wskazówka:
private void button3_Click(object sender, EventArgs e)
{
string tekstZrodlowy = textBox1.Text;
string szukanyCiag = textBox4.Text;
int pozycja=tekstZrodlowy.IndexOf(szukanyCiag);
string trescKomunikatu = null;
if (pozycja > -1)
{
trescKomunikatu = "Szukany ciag znaków " +
szukanyCiag +
" jest na pozycji " +
pozycja;
}
else trescKomunikatu = "Szukany ciag znaków nie występuje w źródle";
MessageBox.Show(trescKomunikatu,
"Komunikat",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Rozwiązanie pod konsolę działa jak poniżej
![IndexOf konsola Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-6.webp)
Kod proponowanej metody rozwiązania pod konsolę
Wskazówka:
static void Zadanie3()
{
Console.WriteLine("Wprowadź teskt źródłowy ");
string tekstZrodlowy = Console.ReadLine();
Console.WriteLine("Wprowadź szukany ciąg ");
string szukanyCiag = Console.ReadLine();
int pozycja = tekstZrodlowy.IndexOf(szukanyCiag);
string trescKomunikatu = null;
if (pozycja > -1)
{
trescKomunikatu = "Szukany ciag znaków " +
szukanyCiag +
" jest na pozycji " +
pozycja;
}
else trescKomunikatu = "Szukany ciag znaków nie występuje w źródle";
Console.WriteLine(trescKomunikatu);
}
Zad 4.
Znajdź wszystkie indeksy wystąpienia podanego ciągu znaków we wprowadzonym tekście źródłowym. Rozwiązanie przedstaw jako aplikacja konsolowa wzorując się na proponowanym rozwiązaniu desktopowym.
W poniższym przykładzie szukano ciągu znaków: kot
![IndexOf desktop Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-7.webp)
Przykładowa funkcja realizująca powyższe działanie w rozwiązaniu desktopowym ma kod jak poniżej
Wskazówka:
private void button4_Click(object sender, EventArgs e)
{
int idPoz = -1;
int j = 0;
string tekstZrodlowy = textBox1.Text;
string szukanyCiag = textBox4.Text;
int skok = szukanyCiag.Length;
while ((idPoz = tekstZrodlowy.IndexOf(szukanyCiag, j)) >= 0)
{
textBox1.AppendText(Environment.NewLine+
"kolejna pozycja to: " +
j);
j = idPoz + skok;
}
}
Ilustracja działającej aplikacji konsolowej.
![IndexOf konsola Visual Studio C#](./g-VS/operacje-na-tekstach-cz2-8.webp)