Pierwszą rzeczą, jaką będzie robił nasz program to komunikacja z użytkownikiem. Moim zdaniem wiedza na temat formatowaniu tekstu jest kluczowa do budowania programów. Ponieważ użytkownik, korzystając z programu, zazwyczaj chce uzyskać jakąś informację, program musi wiedzieć, co ma robić, gdy użytkownik podejmuje jakieś działanie. Jedyną drogą komunikacji, jaką chwilowo mamy jest „Console.ReadLine()”, kluczowa dla późniejszych lekcji będzie dla nas wiedza jak wprowadzony tekst sformatować, obrobić i czytać. Dla programu nie jest oczywiste, że wprowadzony tekst Maciek, Michał, czy Piotrek to imię, dla programu to ciąg znaków, mający swoją długość, początek i koniec. Dopiero dzięki nam i pewnym wyróżnionym dla nas cechom, program rozpozna czy jest to imię, przedmiot czy polecenie. Wpisany tekst ” Piotrek ” wcale nie jest równoznaczny wpisanemu tekstowi „Piorek”, ponieważ ten pierwszy posiada spacje przed słowem i po słowie, ma inną długość i dla programu nie jest tym samym. Każdy tekst, słowo składa się ze znaków, których rodzaj to „Char”, w zależności od tego, w jakim kraju jesteśmy, jaki system mamy zainstalowany, nasz komputer dobiera znaki na podstawie ich wartości numerycznych w tabeli. Podstawową tabelą znaków jest tabela ASCII, która zawiera podstawowe znaki od 0 do 127 (tutaj pełna tabela ASCII), dodatkowo znaki od 128 do 255 są dodawane na podstawie tabeli ISO, która jest różna w zależności od tego, z jakiego języka korzystamy na komputerze. Aby sprawdzić, jaki numer w tabeli ma znak wystarczy wywołać metodę:
1 2 3 4 5 6 |
Console.WriteLine((char)243); Console.WriteLine((int)'x'); //Wyświetli: //ó //120 |
która wyświetli reprezentację numeryczną znaku i zamieni liczbę na znak, tak więc słowo:
” Piotrek ” odebrane będzie przez komputer jako „32,32,32,80,105,111,116,114,101,107,32,32,32” a głębiej jako kombinację zer i jedynek, skupmy się jednak na reprezentacji dziesiętnej, tak więc „32,32,32,80,105,111,116,114,101,107,32,32,32” wcale nie jest równe „80,105,111,116,114,101,107”. Omówimy sobie teraz kilka bardzo przydatnych elementów, które pomogą nam podczas obróbki tekstu. Aby sprawdzić długość tekstu, należy wykorzystać metodę „Length”:
1 2 3 4 5 6 7 |
Console.Write("Wpisz tekst: "); string x = Console.ReadLine(); Console.WriteLine("twój tekst '" + x + "' jest długości: " + x.Length); //Wyświetli: //Wpisz tekst: test //twój tekst 'test' jest długości: 4 |
Puste pola po słowie lub przed słowem, zazwyczaj nazywa się Whitespace, występują zazwyczaj w bazach danych, gdy wpis ma z góry narzuconą wielkość, a tekst jest krótszy od tej długości, wtedy pusta przestrzeń wypełniana jest spacjami. Aby ją usunąć, stosuje się metody:
1 2 3 4 5 6 7 8 9 10 |
Console.Write("|"); Console.Write(" WhiteSpace ".TrimStart()); // usunie spacje na początku Console.Write("|"); Console.Write(" WhiteSpace ".TrimEnd()); // usunie spacje na końcu Console.Write("|"); Console.Write(" WhiteSpace ".Trim()); // usunie spacje na początku i na końcu Console.Write("|"); //Wyświetli: //|WhiteSpace | WhiteSpace|WhiteSpace| |
Ponadto metoda „Trim()” usunie wszystkie spacje, nawet te wewnątrz tekstu. Bardzo prosto sprowadza się tekst do małych liter i dużych:
1 2 3 4 5 6 |
Console.WriteLine("PiOtReK".ToLower());//zamienia litery na małe Console.WriteLine("PiOtReK".ToUpper());//zamienia litery na duże //Wyświetli: //piotrek //PIOTREK |
Tekst można uciąć, zarówno z lewej jak i z prawej strony, można również wyciąć kawałek ze środka. Położenie znaków w tekście numerowane jest od 0:
Tak więc, jeśli chcielibyśmy usunąć literę „e” to nie znajduje się ona na pozycji szóstej a na pozycji piątej. Przykład wycinania tekstu:
1 2 3 4 5 6 7 8 9 |
int x = "PiOtReK".Length; //pobieramy długość tekstu Console.WriteLine("PiOtReK".Substring(0,3));//zwróci pierwsze trzy litery Console.WriteLine("PiOtReK".Substring(x-3, 3));//zwróci ostatnie trzy litery Console.WriteLine("PiOtReK".Substring(3));//zwróci litery wycięte po literze na pozycji 4 //Wyświetli: //PiO //ReK //tReK |
Jeśli chcielibyśmy wydobyć literę z konkretnej pozycji w tekście, wystarczy wpisać jej indeks w nawiasie kwadratowym []. Jeśli chcielibyśmy pobrać literę „e” ze słowa „Piotrek”, wyglądałoby to następująco:
1 2 3 4 5 6 7 |
string x = "Piotrek"; char z = x[5]; //lub char y = "Piotrek"[5]; Console.WriteLine(x[5]); //wyświetli literę: e Console.WriteLine("Piotrek"[5]); //wyświetli literę: e |
Elementy tekstu można zamieniać, zarówno grupy znaków, jak i pojedyncze znaki, używamy w tym celu metody „Replace” i wskazujemy, jaki element ma być zamieniony na jaki:
1 2 3 |
Console.WriteLine("Marlenka".Replace("a","x")); //Mxrlenkx Console.WriteLine("Marlenka".Replace("Ma", "x")); //xrlenkx Console.WriteLine("Marlenka".Replace("a", "xxx")); //Mxxxrlenkxxx |
Metoda „Compare” sprawdzi czy tekst jest taki sam, jeśli tak jest zwróci true jeśli nie, zwróci false:
1 2 3 4 |
Console.WriteLine(string.Compare("prawda", "prawda")); //Zwróci 0 Console.WriteLine(string.Compare("prawda", "falsz")); //Zwróci 1 Console.WriteLine(Convert.ToBoolean(string.Compare("prawda", "prawda"))); //Zwróci false Console.WriteLine(Convert.ToBoolean(string.Compare("prawda", "falsz"))); //Zwróci true |
Ogólnie tego typu działania, przydadzą się nam później podczas wykonywania pętli lub sprawdzania warunku instrukcji. Metoda Contains prowadzi czy wyrażenie znajduje się w naszej zmiennej, może to być długi, krótki tekst lub pojedyncza litera.
1 2 |
Console.WriteLine(Convert.ToBoolean("prawda".Contains("sz"))); //Zwróci false Console.WriteLine(Convert.ToBoolean("prawda".Contains("da"))); //Zwróci true |
Metoda Replece pozwoli na zamianę wybranego znaku lub ciągu znaków na inny zdefiniowany przez użytkownika:
1 2 3 |
Console.WriteLine("prawda".Replace('a','b')); //Zwróci prbwdb Console.WriteLine("prawda".Replace("prawda", "fałsz")); //Zwróci fałsz Console.WriteLine("prawda".Replace("prawda", "fałsz").Replace('a', 'b')); //Zwróci fbłsz |
Używając metody Rmove, usuniemy z ciągu wybrany element lub elementy. Wstawimy je, używając metody Insert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Console.WriteLine("abc---def"); Console.WriteLine( "abc---def".Remove(3));//zostawi tylko trzy pierwsze litery Console.WriteLine( "abc---def".Remove(3, 3));//usunie trzy znaki zaczynając od pozycji 3 Console.WriteLine("abc---def".Remove(3).Insert(3,"+++ghi"));//doda znaki na pozycji 3 Console.WriteLine("abc".Insert("abc".Length, "+++jkl")); //doda znaki na końcu tekstu Console.WriteLine("abc---def".Remove(3, 3).Insert(3, "+++"));//wstawi znaki wewnątrz tekstu //Wyświetli: //abc---def //abc //abcdef //abc+++ghi //abc+++jkl //abc+++def |
Metoda Split pozwoli na podział naszego tekstu w określony sposób i stworzenie z niego tablicy, wyodrębnienie słów, zliczanie ich itp.
1 2 3 4 5 6 7 8 9 |
String[] substrings = "To jest tekst ze spacjami.".Split(' '); foreach (var substring in substrings) Console.WriteLine(substring); //Wyświetli //To //jest //tekst //ze //spacjami. |
To są podstawowe metody, które mogą okazać się bardzo użyteczne podczas tworzenia programów na dalszym etapie kursu.
- Ktoś popełnił błąd w tekście „Ananas, andnas, ananas dla nas.”, używając metody Remove i Insert popraw tekst.