Fragment wykładu z mentorem w ramach kursu Codegym University. Zapisz się na pełny kurs.


1 Porównanie ciągów znaków

Jedną z najczęstszych operacji na łańcuchach jest porównanie. Klasa String ma ponad dziesięć różnych metod, które służą do porównywania jednego ciągu z innym. Poniżej przyjrzymy się 8 głównym.

Metody Opis
boolean equals(String str)
Ciągi są uważane za równe, jeśli wszystkie ich znaki są zgodne.
boolean equalsIgnoreCase(String str)
Porównuje ciągi, ignorując wielkość liter (ignoruje, czy są to wielkie czy małe litery)
int compareTo(String str)
Porównuje ciągi, zwraca liczbę pasujących znaków od początku ciągu.
public int compareToIgnoreCase(String str)
Zwraca liczbę pasujących znaków od początku łańcucha, ignoruje wielkość liter
boolean regionMatches(int toffset, String str, int offset, int len)
Porównuje części łańcuchów
boolean startsWith(String prefix)
Sprawdza, czy bieżący ciąg zaczyna się od ciąguprefix
boolean endsWith(String suffix)
Sprawdza, czy bieżący ciąg kończy się na ciągusuffix

Załóżmy, że chcesz napisać program, który prosi użytkownika o podanie ścieżki do pliku, a następnie sprawdza typ pliku na podstawie jego rozszerzenia. Kod takiego programu mógłby wyglądać mniej więcej tak:

Kod Notatki
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Utwórz Scannerobiekt
Odczytaj linię z konsoli

Sprawdź, czy ciąg pathkończy się podanym ciągiem


2 Wyszukiwanie podciągów

Po porównaniu łańcuchów, drugą najpopularniejszą operacją jest znalezienie jednego ciągu wewnątrz drugiego. Klasa String ma również kilka metod:

Metody Opis
int indexOf(String str)
Wyszukuje ciąg strw bieżącym ciągu. Zwraca indeks pierwszego znaku pierwszego wystąpienia.
int indexOf(String str, int index)
Wyszukuje ciąg strw bieżącym ciągu, pomijając pierwsze indexznaki. Zwraca indeks wystąpienia.
int lastIndexOf(String str)
Wyszukuje ciąg strw bieżącym ciągu, zaczynając od końca. Zwraca indeks pierwszego wystąpienia.
int lastIndexOf(String str, int index)
Wyszukuje ciąg strw bieżącym ciągu od końca, pomijając pierwsze indexznaki.
boolean matches(String regex)
Sprawdza, czy bieżący ciąg pasuje do wzorca określonego przez wyrażenie regularne.

Metody indexOf(String)i indexOf(String, index)są często używane w połączeniu. Pierwsza metoda pozwala znaleźć pierwsze wystąpienie przekazanego podłańcucha w bieżącym ciągu. Druga metoda pozwala znaleźć drugie, trzecie itd. wystąpienie, pomijając pierwsze znaki indeksu.

Załóżmy, że mamy adres URL taki jak „ https://domain.com/about/reviews ” i chcemy zastąpić nazwę domeny ciągiem „ codegym.cc ”. Adresy URL mogą mieć różne nazwy domen, ale wiemy, że:

  • Nazwa domeny jest poprzedzona dwoma ukośnikami — „//”
  • Po nazwie domeny następuje pojedynczy ukośnik — „ /

Oto jak wyglądałby kod takiego programu:

Kod Notatki
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Utwórz obiekt Scanner
Odczyt linii z konsoli

Pobierz indeks pierwszego wystąpienia ciągu znaków " //"
Otrzymujemy indeks pierwszego wystąpienia ciągu znaków /, ale zwracamy uwagę tylko na wystąpienie znaków //.
Otrzymujemy ciąg od początku do końca znaków //
Otrzymujemy ciąg od /do końca.

Łączymy łańcuchy i nową domenę.

Metody lastIndexOf(String)i lastIndexOf(String, index)działają w ten sam sposób, tylko wyszukiwanie odbywa się od końca łańcucha do początku.



3 Tworzenie podciągów

Fragment wykładu z mentorem w ramach kursu Codegym University. Zapisz się na pełny kurs.


Oprócz porównywania łańcuchów i znajdowania podłańcuchów istnieje jeszcze jedna bardzo popularna czynność: pobieranie podłańcucha z ciągu. Tak się złożyło, że poprzedni przykład pokazał substring()wywołanie metody, które zwróciło część łańcucha.

Oto lista 8 metod, które zwracają podłańcuchy z bieżącego ciągu:

Metody Opis
String substring(int beginIndex, int endIndex)
Zwraca podłańcuch określony przez zakres indeksu beginIndex..endIndex.
String repeat(int count)
Powtarza bieżący ciąg n razy
String replace(char oldChar, char newChar)
Zwraca nowy ciąg znaków: zastępuje znak oldCharznakiemnewChar
String replaceFirst(String regex, String replacement)
Zastępuje pierwszy podłańcuch, określony przez wyrażenie regularne, w bieżącym ciągu.
public String replaceAll(String regex, String replacement)
Zastępuje wszystkie podłańcuchy w bieżącym ciągu, które pasują do wyrażenia regularnego.
String toLowerCase()
Konwertuje ciąg na małe litery
String toUpperCase()
Konwertuje ciąg na wielkie litery
String trim()
Usuwa wszystkie spacje na początku i na końcu łańcucha

Oto podsumowanie dostępnych metod:

substring(int beginIndex, int endIndex)metoda

Metoda substringzwraca nowy ciąg, który składa się ze znaków w bieżącym ciągu, zaczynając od znaku z indeksem beginIndexi kończąc na endIndex. Podobnie jak w przypadku wszystkich interwałów w Javie, znak z indeksem endIndexnie jest uwzględniany w interwale. Przykłady:

Kod Wynik
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Jeśli endIndexparametr nie jest określony (co jest możliwe), to podłańcuch jest pobierany od znaku w punkcie beginIndex do końca łańcucha.

repeat(int n)metoda

Metoda repeat po prostu powtarza bieżące nczasy łańcucha. Przykład:

Kod Wynik
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(chat oldChar, char newChar)metoda

Metoda replace()zwraca nowy ciąg znaków, w którym wszystkie znaki oldCharsą zastępowane znakiem newChar. Nie zmienia to długości łańcucha. Przykład:

Kod Wynik
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()i replaceAll()metody

Metoda replaceAll()zastępuje wszystkie wystąpienia jednego podłańcucha innym. Metoda replaceFirst()zastępuje pierwsze wystąpienie przekazanego podciągu określonym podciągiem. Ciąg, który ma zostać zastąpiony, jest określony przez wyrażenie regularne. Zagłębimy się w wyrażenia regularne w zadaniu Java Multithreading .

Przykłady:

Kod Wynik
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()metody

Poznaliśmy te metody, gdy po raz pierwszy dowiedzieliśmy się o wywoływaniu metod klasy String.

trim()metoda

Metoda trim()usuwa początkowe i końcowe spacje z łańcucha. Nie dotyka spacji znajdujących się wewnątrz łańcucha (tj. nie na początku ani na końcu). Przykłady:

Kod Wynik
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"