Przeczytaj
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
:
W taki sposób utworzyliśmy zmienną imie
. Jest to obiekt typu String
; nadaliśmy mu od razu wartość marcin
.
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:
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 (+
):
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()
:
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ę metodamimetodami. 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:
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
:
Funkcja equals()
zwraca wartość true
, jeżeli obiekty ciag1
oraz ciag2
są takie same. W przeciwnym wypadku zwracaną wartością jest false
.
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ówlitera
– szukana litera; znak
Wynik:
Program wyświetla liczbę wystąpień litery litera
we frazie haslo
.
Zaczniemy od szkicu zapisanego za pomocą pseudokodu:
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:
Następnie otwieramy pętlę for
, która będzie sprawdzać kolejne elementy ciągu haslo
:
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
):
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 litera
, inkrementujemyinkrementujemy zmienną liczbaWystąpien
. Na koniec wyświetlamy jej wartość:
Słownik
zwiększenie wartości zmiennej
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()
wyrażenie brzmiące tak samo, gdy jest czytane zarówno od strony lewej do prawej, jak i wspak (np. „a kilku tu klika”)