out.println("Ciągi są różne.");
}
Tym razem program powinien wypisać:
Ciągi są równe.
Inną metodą związaną z porównywaniem obiektów klasy String jest metoda compareTo(). Służy ona do leksyko-graficznego porównywania dwóch ciągów i zwraca nie MANIPULOWANIE CIĄGAMI
wartość logiczną, ale liczbową: dodatnią, ujemną albo zerową. Wartość 0 jest zwracana jedynie dla takich dwóch ciągów, dla których metoda equals() dałaby wartość true. Wartość ujemna wskazuje, że ciąg, na rzecz którego wywołano metodę, jest „pierwszy”, to znaczy alfabetycznie poprzedza drugi ciąg uczestniczący w porówna-niu, przekazany w wywołaniu metody. Z kolei wartość dodatnia oznacza, że ciąg, na rzecz którego wywołano metodę, jest alfabetycznie za ciągiem przekazanym w wy-wołaniu. Gwoli ścisłości, porównanie odbywa się na bazie wartości Unicode poszczególnych, odpowiadających sobie 34
ROZDZIAŁ 3
Wyszukiwanie i wyłuskiwanie podciągów
znaków porównywanych ciągów. Metoda compareTo() ma również swój odpowiednik ignorujący wielkość liter —
compareToIgnoreCase(). Działa on tak samo, tyle że przy porównywaniu znaków nie uwzględnia wielkości liter. Spójrzmy na następny przykład:
String name1 = "Kowalski";
String name2 = "Nowak";
int result = name1.compareTo(name2);
if (result == 0) {
System.out.println("Nazwiska są identyczne.");
}
MANIPULOWANIE CIĄGAMI
else if (result > 0) {
System.out.println("Nazwisko name1 jest
åalfabetycznie pierwsze.");
}
else if (result < 0) {
System.out.println("Nazwisko name1 jest
åalfabetycznie drugie.");
}
W przypadku tego programu powinniśmy otrzymać na wyjściu taki komunikat:
Nazwisko name1 jest alfabetycznie drugie.
Wyszukiwanie i wyłuskiwanie
podciągów
int result = string1.indexOf(string2);
int result = string1.indexOf(string2, 5);
Wywołanie pierwszej z powyższych metod powinno umie-
ścić w zmiennej result indeks pierwszego wystąpienia 35
Wyszukiwanie i wyłuskiwanie podciągów podciągu string2 w ciągu string1. Jeśli w ciągu string1
nie ma ciągu string2, metoda zwróci wartość -1.
ROZDZIAŁ 3
W drugiej z powyższych metod wartość zwracana będzie zawierać indeks pierwszego wystąpienia podciągu string2
w ciągu string1, ale za piątym znakiem w string1.
Wartością drugiego argumentu może być dowolna liczba większa od zera. Jeśli będzie większa od długości przeszukiwanego ciągu, metoda zwróci -1.
Oprócz wyszukiwania podciągu w ciągu trzeba czasem dowiedzieć się, gdzie znajduje się interesujący nas podciąg, i przy okazji wyłuskać go z przeszukiwanego ciągu.
Jak dotąd umiemy jedynie zlokalizować potrzebny podciąg w ciągu. Kiedy ustalisz jego indeks, możesz go wyłuskać za pomocą metody substring() klasy String.
Metoda substring() jest przeciążona, co oznacza, że można ją wywoływać na kilka sposobów. Jeden z nich polega na przekazaniu indeksu podciągu do wyłuskania.
MANIPULOWANIE CIĄGAMI
W tej wersji metoda zwraca podciąg zaczynający się od wskazanego znaku i rozciągający się aż do końca ciągu źródłowego. Kolejny sposób to wywołanie substring() z dwoma argumentami: indeksem początku i indeksem końca ciągu.
String string1 = "Mój adres to Polna 33"; String address = string1.substring(13);
System.out.println(address);
W przypadku takiego programu powinniśmy otrzymać na wyjściu napis:
Polna 33
36
ROZDZIAŁ 3
Przetwarzanie ciągu znak po znaku
Na 13. pozycji w ciągu string1 znajduje się P; to jest początek naszego podciągu. Zauważ, że ciągi znaków są zawsze indeksowane od zera, a ostatni znak ciągu znajduje się pod indeksem -1 (koniec ciągu).
Przetwarzanie ciągu
znak po znaku
MANIPULOWANIE CIĄGAMI
for (int index = 0; index < string1.length(); index++) {
char aChar = string1.charAt(index);
}
Metoda charAt() pozwala na pozyskanie pojedynczego znaku wyłuskanego z ciągu spod wskazanej pozycji. Znaki są indeksowane w ciągu od zera, to znaczy mają numery od 0 do liczby równej długości ciągu zmniejszonej o jeden.
Powyższa pętla przetwarza kolejne znaki ciągu string1.