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

Porównanie jest jedną z najczęstszych czynności wykonywanych przy użyciu łańcuchów. Klasa String ma ponad dziesięć różnych metod, które służą do porównywania ciągów znaków z ciągami znaków. Poniżej przyjrzymy się siedmiu 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 znaków, ignorując wielkość liter (rozmiar).
int compareTo(String str)
Porównuje ciągi leksykograficznie. Zwraca 0, jeśli łańcuchy są równe. Liczba jest mniejsza od zera, jeśli bieżący ciąg jest mniejszy niż ciąg parametru. Liczba jest większa od zera, jeśli bieżący ciąg znaków jest większy niż ciąg parametrów
int compareToIgnoreCase(String str)
Porównuje ciągi leksykograficznie, ignoruje wielkość liter. Zwraca 0, jeśli łańcuchy są równe. Liczba jest mniejsza od zera, jeśli bieżący ciąg jest mniejszy niż ciąg parametru. Liczba jest większa od zera, jeśli bieżący ciąg znaków jest większy niż ciąg parametrów
boolean regionMatches(int toffset, String str, int offset, int len)
Porównuje części łańcuchów
boolean startsWith(String prefix)
Sprawdza, czy bieżąca linia zaczyna się od ciągu znakówprefix
boolean endsWith(String suffix)
Sprawdza, czy bieżąca linia kończy się liniąsuffix

Powiedzmy, że chcesz napisać program, który prosi użytkownika o podanie ścieżki do pliku i sprawdza, co to za plik, patrząc na jego rozszerzenie. Wtedy 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("Это Jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("Это HTML-strona");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("Это dokument Word");
}
else
{
   System.out.println("Неизвестный формат");
}
Tworzenie obiektu Scanner
Odczytanie napisu z konsoli

Sprawdzenie, czy napis pathkończy się podanym napisem


2. Wyszukaj podciągi

Drugą najpopularniejszą operacją po porównywaniu łańcuchów jest wyszukiwanie jednego ciągu w drugim. Klasa String ma również kilka metod:

Metody Opis
int indexOf(String str)
Wyszukuje ciąg znaków strw bieżącym wierszu. Zwraca indeks pierwszego znaku napotkanego ciągu.
int indexOf(String str, int index)
Wyszukuje ciąg znaków strw bieżącym wierszu, pomijając indexpierwsze znaki. Zwraca indeks znalezionego wystąpienia.
int lastIndexOf(String str)
Wyszukuje ciąg strw bieżącym ciągu 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 indexpierwsze znaki.
boolean matches(String regex)
Sprawdza, czy bieżący ciąg pasuje do wzorca podanego w wyrażeniu regularnym.

Metody indexOf(String)i indexOf(String, index)są często używane w parach. Pierwszy pozwala znaleźć pierwsze wystąpienie danego podłańcucha w bieżącym ciągu. A druga metoda pozwala znaleźć drugą, trzecią itd. wystąpień, pomijając pierwsze znaki indeksu.

Załóżmy, że mamy adres URL podobny do tego: „ https://domen.ru/about/reviews ” i chcemy zastąpić nazwę domeny codegym.cc . Domeny w adresach URL mogą być różne, 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
Odczytaj ciąg z konsoli

Pobierz indeks pierwszego wystąpienia ciągu //
Pobierz indeks pierwszego wystąpienia ciągu /, ale zwracaj uwagę tylko na znaki //.
Otrzymujemy ciąg od początku i końca ze znakami //
Otrzymujemy ciąg od /i do końca.

Sklejamy linie i nową domenę.

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



3. Utwórz podciągi

Oprócz porównywania łańcuchów i znajdowania podłańcuchów istnieje jeszcze jedna bardzo popularna czynność - pobieranie podłańcucha z łańcucha. W poprzednim przykładzie właśnie widziałeś wywołanie metody substring(), które zwróciło część łańcucha.

Oto lista 8 metod uzyskiwania podciągów z bieżącego ciągu:

Metody Opis
String substring(int beginIndex, int endIndex)
Zwraca podłańcuch określony przez interwał znaków beginIndex..endIndex.
String repeat(int count)
Powtarza liczbę bieżących linii
String replace(char oldChar, char newChar)
Zwraca nowy ciąg znaków: zastępuje znak oldCharznakiemnewChar
String replaceFirst(String regex, String replacement)
Zamienia bieżący ciąg na podciąg określony przez wyrażenie regularne.
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 krótki opis istniejących metod:

metodasubstring(int beginIndex, int endIndex)

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

Kod Wynik
"Привет".substring(0, 3);
"При"
ривет".substring(1, 4);
"рив"
ривет".substring(1, 6);
"ривет"
ривет".substring(1);
"ривет"

Jeśli parametr endIndexnie jest określony (a jest to możliwe), podłańcuch jest pobierany od znaku beginIndex do końca łańcucha.

metodarepeat(int n)

Metoda repeat po prostu powtarza bieżące nczasy linii. Przykład:

Kod Wynik
"Cześć".repeat(3);
"ПриветПриветПривет"
"Cześć".repeat(2);
"ПриветПривет"
"Cześć".repeat(1);
"Привет"
"Cześć".repeat(0);
""

metodareplace(char oldChar, char newChar)

Metoda replace()zwraca nowy łańcuch, w którym wszystkie znaki oldCharsą zastępowane przez znak newChar. Długość łańcucha się nie zmienia. Przykład:

Kod Wynik
"Cześć".replace('Я', 'я');
"Привет"
"Cześć".replace('т', 'д');
"Привед"
"Cześć".replace('I', 'е');
"Превет"
"Cześć".replace('I', 'ы');
"Прывет"

Metody replaceFirst()ireplaceAll()

Metoda replaceAll()zastępuje wszystkie wystąpienia jednego podciągu innym. Metoda replaceFirst()zastępuje pierwsze wystąpienie przekazanego podciągu podanym podłańcuchem. Łańcuch, który ma zostać zastąpiony, jest określany za pomocą wyrażenia regularnego. Przeanalizujemy 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!"

MetodytoLowerCase() и toUpperCase()

Zetknęliśmy się z tymi metodami, kiedy dopiero po raz pierwszy nauczyliśmy się wywoływać metody klasy String.

metodatrim()

Metoda trim()usuwa spacje z łańcucha od początku i od końca łańcucha. Nikt nie dotyka spacji wewnątrz łańcucha. Przykłady:

Kod Wynik
"     ".trim();
""
"Cześć".trim();
"Привет"
" Привет\n Jak дела?\n   ".trim();
"Привет\n Jak дела?\n"
"  Пароль\n   \n ".trim();
"Пароль\n   \n"