1. Klasa urządzeniaString

Dzisiaj porozmawiamy o klasie String. Klasa String jest najpopularniejszą klasą w Javie po typie int. Jest używany absolutnie wszędzie. Ma kilka przydatnych metod, które lepiej znać niż nie wiedzieć.

Klasa Stringjest jedyną klasą, inną niż typy pierwotne, której literały mogą być używane w switch; kompilator w specjalny sposób obsługuje dodawanie napisów i obiektów; obiekty Stringsą przechowywane w pamięci w specjalny sposób. Ogólnie rzecz biorąc, klasa Stringjest bardzo specyficzną klasą.

Klasa Stringposiada również kilka klas satelickich, których celem jest dalsze uproszczenie pracy z ciągami znaków w Javie. Kiedy nauczysz się tego wszystkiego, będzie ci naprawdę dużo łatwiej robić wiele rzeczy. Cóż, zaczniemy od samego serca tego ekosystemu – od urządzenia z klasą String.

Tablica znaków

A klasa Stringjest w rzeczywistości bardzo prosta: wewnątrz niej znajduje się tablica znaków (char), która przechowuje wszystkie znaki łańcucha. Na przykład tak jest przechowywane słowo „Cześć”:

Urządzenie klasy String
Ważny!

W rzeczywistości wszystko jest trochę inne. Ponieważ klasa Stringjest bardzo ważna, wykorzystuje wiele optymalizacji, a dane są przechowywane wewnętrznie nie jako tablica znaków, ale po prostu jako tablica bajtów.


2. Metody klasoweString

Klasa ma Stringwiele metod: ma tylko 18 konstruktorów! Dlatego poniżej przedstawiamy tylko najważniejsze z nich:

Metody Opis
int length()
Zwraca liczbę znaków w ciągu
boolean isEmpty()
Sprawdza, czy string == pusty string
boolean isBlank()
Sprawdza, czy łańcuch zawiera tylko białe znaki: spację, tabulator, enter itp.
char charAt(int index)
Zwraca znak na pozycji indeksu w ciągu.
char[] toCharArray()
Zwraca tablicę znaków (kopiowanie), z których składa się ł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 znaków w puli StringPool.

Więcej o konstruktorach dowiesz się z artykułu Po co mi konstruktor?

Napiszmy program, który konwertuje ścieżkę pliku ze stylu Unix na styl Windows. Unix używa znaku jako separatora katalogów /, Windows używa znaku \.

Rozwiązanie 1 - użycie tablicy znaków

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);
Tworzenie obiektu Scanner
Odczytywanie ciągu znaków z konsoli

Konwersja ciągu znaków na tablicę znaków Przechodzenie
przez znaki w pętli
Jeśli znakiem jest /,
zamień go na \. Nie zapomnij o ekranowaniu.

Utwórz nowy ciąg na podstawie tablicy znaków.
Wyświetlamy napis na ekranie.

Rozwiązanie 2 - użyj 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);
Tworzenie obiektu Scanner
Odczytywanie ciągu znaków z konsoli

Konwersja ciągu znaków na tablicę ciągów znaków . Symbol jest używany jako separator /(dodatkowe dwa ukośniki są konsekwencją podwójnej ucieczki).
Łączymy wszystkie ciągi znaków z tablicy łańcuchów , używając znaku jako separatora \(widzimy, że jest to znak ucieczki).

Wyświetlamy napis na ekranie.

Rozwiązanie 3 - przy użyciu metody replace(char oldChar, char newChar):

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

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

System.out.println(result);
Tworzenie obiektu Scanner
Odczytywanie ciągu znaków z konsoli

Po prostu zamień jeden znak na drugi
(drugi znak ucieczki)
Wyświetl ciąg znaków na ekranie.