„Co o tym myślisz, Amigo? Jaka jest najpopularniejsza klasa Java po int?”

„Już dałeś mi spoiler w tytule lekcji, Ellie. Jest String!”

„Rzeczywiście, to spoiler. StringJest używany absolutnie wszędzie. Ma kilka przydatnych metod, które lepiej znać.

StringKlasa jest jedyną klasą inną niż typy pierwotne, której literałów można używać w instrukcjach switch; kompilator obsługuje dodawanie łańcuchów znaków i obiekty typu String w specjalny sposób; Stringobiekty są zapisywane w pamięci w specjalny sposób. Zasadniczo klasa Stringjest bardzo klasa specjalna.

„Ponadto Stringklasa ma kilka klas pomocniczych, których celem jest dalsze uproszczenie pracy z ciągami znaków w Javie. Kiedy nauczysz się tego wszystkiego, wiele rzeczy stanie się dla ciebie znacznie łatwiejszych”.

„Nie mogę się doczekać”.

„Cóż, zaczniemy od samego rdzenia tego ekosystemu — organizacji klasy String. Struktura klasy Stringjest w rzeczywistości bardzo prosta: wewnątrz niej znajduje się tablica znaków ( chartablica), która przechowuje wszystkie znaki łańcucha. na przykład tak jest przechowywane słowo „Hello”:

Struktura klasy String

To ważne.

W rzeczywistości nie jest to do końca dokładne. Ponieważ Stringklasa jest bardzo ważna, wykorzystuje wiele optymalizacji, a dane są wewnętrznie przechowywane nie jako tablica znaków, ale po prostu jako tablica bajtów.

Metody klasy String

Klasa Stringma wiele metod: ma tylko 18 konstruktorów! Dlatego poniżej wymienię tylko te najczęściej używane:

Metody Opis
int length()
Zwraca liczbę znaków w ciągu
boolean isEmpty()
Sprawdza, czy ciąg jest pustym ciągiem
boolean isBlank()
Sprawdza, czy łańcuch zawiera tylko białe znaki: spację, tabulator, nową linię itp.
char charAt(int index)
Zwraca znak na pozycji indeksu w ciągu.
char[] toCharArray()
Zwraca tablicę znaków (kopii) składających się na łańcuch
byte[] getBytes()
Konwertuje ciąg na zestaw bajtów i zwraca tablicę bajtów.
String[] split(String regex)
Dzieli ciąg na wiele podciągów.
String join(CharSequence delimiter, elements)
Łączy ze sobą wiele podciągów
String intern()
Umieszcza ciąg w puli ciągów.

"To wygląda bardzo dobrze!"

„Napiszmy program, który konwertuje ścieżkę pliku ze stylu Unix na styl Windows. Unix używa znaku /do oddzielania folderów, podczas gdy Windows używa \znaku.

Rozwiązanie 1. Korzystanie z chartablicy

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

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Utwórz obiekt Scanner
Odczyt linii z konsoli

Konwertuj ciąg znaków na tablicę znaków
Zapętlaj znaki
Jeśli znak to /,
zamień go na \. Nie zapomnij o ucieczce.

Utwórz nowy ciąg na podstawie tablicy znaków.
Wyświetl ciąg.

Rozwiązanie 2. Korzystanie z metod split()i join():

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

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Utwórz obiekt Scanner
Odczyt wiersza z konsoli

Konwertuj ciąg znaków na tablicę ciągów znaków . Znak /jest używany jako separator (dodatkowe dwa ukośniki są wynikiem podwójnej ucieczki).
Połącz wszystkie łańcuchy w tablicy strings . The \jest używany jako separator (widzimy, że uciekł).

Wyświetl ciąg.

Rozwiązanie 3. Korzystając z replace(char oldChar, char newChar)metody:

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

String result = path.replace('/', '\\');

System.out.println(result);
Stwórz obiekt Scanner
Odczyt linii z konsoli

Po prostu zastąp jeden znak innym
(drugi to znak ucieczki)
Wyświetl ciąg znaków.

„Najbardziej podobało mi się trzecie rozwiązanie. Ale przećwiczę wszystkie trzy”.

"Dobra robota, Amigo. Widzę, że już niecierpliwisz się, aby zastosować swoją nową wiedzę w praktyce. Lekcja się skończyła."