Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Ciągi znaków w języku Java

Ciągiem znaków nazywamy uporządkowany ciąg elementów typu char. Poszczególne znaki ciągu są indeksowane; pierwszy z nich ma numer zero, drugi jeden itd.

W języku Java istnieje specjalna klasa String służąca do posługiwania się ciągami znaków. Ponieważ nie omawialiśmy jeszcze programowania obiektowego, poprzestańmy na stwierdzeniu, że klasa String jest kolejnym typem danych, do którego dołączono pewne narzędzia.

Klasa pozwala tworzyć obiekty będące odpowiednikami zwykłych zmiennych. Można powiedzieć, że obiekt jest zmienną typu klasa (podobnie jak po wydaniu polecenia char litera mówi się, że litera jest zmienną typu znakowego). Na razie obiekty będziemy traktować jak zmienne, a klasę String jako typ danych.

Zdefiniujmy obiekt (zmienną) klasy String:

Linia 1. String imie znak równości cudzysłów marcin cudzysłów średnik.

W taki sposób utworzyliśmy zmienną imie. Jest to obiekt typu String; nadaliśmy mu od razu wartość marcin.

Ważne!

Pamiętaj o różnicy między znakami apostrofu i cudzysłowu. W apostrofy ujmuje się pojedyncze znaki (np. 'a'), zaś w cudzysłów całe ich ciągi (np. "marcin").

W języku Java ciągi znaków są niemodyfikowalne. Jeżeli popełnimy błąd podczas definiowania zmiennej imie – na przykład zapiszemy słowo Marcin z małej litery – nie możemy wymienić tylko pierwszego znaku. Konieczne jest przypisanie zmiennej nowej, tym razem poprawnej wartości:

Linia 1. imie znak równości cudzysłów Marcin cudzysłów średnik.

Przypisując wartość obiektowi imie, możemy dołączyć do niego kolejny ciąg znaków. Nazywamy to konkatenacją, a cała operacja przypomina sumowanie liczb, ponieważ używamy znaku dodawania (+):

Linia 1. imie znak równości cudzysłów Marcin cudzysłów plus cudzysłów Kowalski cudzysłów średnik.

Zmienna imie ma obecnie wartość Marcin Kowalski.

Jak widać, klasa String ułatwia łączenie fragmentów tekstu. Ma ona także wiele innych zalet. Wspomnieliśmy wcześniej, że do klasy dołączono zestaw narzędzi. Są nimi funkcje, za pomocą których można przetwarzać zmienne tego typu.

Wyobraźmy sobie, że chcemy poznać długość obiektu imie. Użyjemy wchodzącej w skład klasy String funkcji length():

Linia 1. imie kropka length otwórz nawias okrągły zamknij nawias okrągły średnik.

W odpowiedzi funkcja length() zwróci wartość 15, ponieważ fraza „Marcin Kowalski” składa się z piętnastu znaków.

Funkcje wbudowane w klasę nazywa się metodamimetodametodami. Aby je wywołać, należy podać nazwę obiektu, na którym ma być wykonana operacja, a następnie wpisać kropkę i nazwę funkcji.

Aby odczytać konkretny element ciągu znaków, używamy metody charAt(indeks), podając indeks jako parametr funkcji:

Linia 1. imie kropka charAt otwórz nawias okrągły 3 zamknij nawias okrągły średnik.

Funkcja zwróci w tym przypadku wartość c typu char, czyli czwartą literę w ciągu „Marcin Kowalski”.

Jak sprawdzić, czy dwa ciągi znaków są identyczne? Mogłoby się wydawać, że należy użyć operatora równości (==). Nic bardziej mylnego – służy on do porównywania pojedynczych znaków. Aby zbadać dwa ciągi, używa się kolejnej metody należącej do klasy String:

Linia 1. ciag1 kropka equals otwórz nawias okrągły ciag2 zamknij nawias okrągły średnik.

Funkcja equals() zwraca wartość true, jeżeli obiekty ciag1 oraz ciag2 są takie same. W przeciwnym wypadku zwracaną wartością jest false.

Przykład 1

Wykorzystamy zdobytą już wiedzę o klasach, obiektach i metodach do napisania programu, który poda liczbę wystąpień litery litera we frazie haslo.

Przetestujemy jego działanie dla frazy radosny rabarbar oraz znaku r.

Specyfikacja:

Dane:

  • haslo – fraza, w której będziemy szukać; ciąg znaków

  • litera – szukana litera; znak

Wynik:

Program wyświetla liczbę wystąpień litery litera we frazie haslo.

Zaczniemy od szkicu zapisanego za pomocą pseudokodu:

Linia 1. haslo ← cudzysłów radosny rabarbar cudzysłów. Linia 2. litera ← apostrof r apostrof. Linia 3. liczbaWystapien ← 0. Linia 5. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły haslo zamknij nawias okrągły minus 1 wykonuj. Linia 6. jeżeli haslo otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości litera dwukropek. Linia 7. liczbaWystapien ← liczbaWystapien plus 1. Linia 9. wypisz liczbaWystapien.

Program ma zbadać kolejne znaki ciągu haslo. Jeżeli którykolwiek z nich to litera, zmienna liczbaWystapien zwiększa się o jeden. Na koniec wyświetlamy jej wartość.

Napiszemy teraz algorytm w języku Java. Najpierw inicjujemy zmienne:

Linia 1. String haslo znak równości cudzysłów radosny rabarbar cudzysłów średnik. Linia 2. char litera znak równości apostrof r apostrof średnik. Linia 3. int liczbaWystapien znak równości 0 średnik.

Następnie otwieramy pętlę for, która będzie sprawdzać kolejne elementy ciągu haslo:

Linia 1. String haslo znak równości cudzysłów radosny rabarbar cudzysłów średnik. Linia 2. char litera znak równości apostrof r apostrof średnik. Linia 3. int liczbaWystapien znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny haslo kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. zamknij nawias klamrowy.

Długość zmiennej typu String poznajemy dzięki metodzie length(). Następnie stosujemy instrukcję warunkową, która sprawdza, czy badany znak jest zadaną literą litera (i w takim przypadku zwiększa wartość zmiennej liczbaWystapien):

Linia 1. String haslo znak równości cudzysłów radosny rabarbar cudzysłów średnik. Linia 2. char litera znak równości apostrof r apostrof średnik. Linia 3. int liczbaWystapien znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny haslo kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. if otwórz nawias okrągły haslo kropka charAt otwórz nawias okrągły i zamknij nawias okrągły znak równości znak równości litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. liczbaWystapien plus plus średnik. Linia 8. zamknij nawias klamrowy. Linia 9. zamknij nawias klamrowy.

Do odczytania pojedynczych znaków używamy metody charAt(), której parametrem są indeksy kolejnych elementów ciągu. Funkcja ta zwraca wartość typu char, a zatem korzystamy ze zwykłego operatora porównania (==), nie zaś z wchodzącej w skład klasy String metody equals().

Jeżeli przetwarzana litera jest równa zliczanej literze literainkrementujemyinkrementacjainkrementujemy zmienną liczbaWystąpien. Na koniec wyświetlamy jej wartość:

Linia 1. String haslo znak równości cudzysłów radosny rabarbar cudzysłów średnik. Linia 2. char litera znak równości apostrof r apostrof średnik. Linia 3. int liczbaWystapien znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny haslo kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. if otwórz nawias okrągły haslo kropka charAt otwórz nawias okrągły i zamknij nawias okrągły znak równości znak równości litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. liczbaWystapien plus plus średnik. Linia 8. zamknij nawias klamrowy. Linia 9. zamknij nawias klamrowy. Linia 11. System kropka out kropka println otwórz nawias okrągły liczbaWystapien zamknij nawias okrągły średnik.

Słownik

inkrementacja
inkrementacja

zwiększenie wartości zmiennej

metoda
metoda

funkcja należąca do klasy i służąca do operowania na jej obiektach (zmiennych); metody są wywoływane za pomocą polecenia obiekt.nazwa_metody()

palindrom
palindrom

wyrażenie brzmiące tak samo, gdy jest czytane zarówno od strony lewej do prawej, jak i wspak (np. „a kilku tu klika”)