Klasa String w Javie została zaprojektowana do pracy z ciągami znaków w Javie. Wszystkie literały łańcuchowe zdefiniowane w programie Java (na przykład „abc”) są instancjami klasy String. Przyjrzyjmy się jego kluczowym cechom:
- Klasa implementuje interfejsy
Serializable
iCharSequence
. Ponieważ jest zawarty w pakieciejava.lang
, nie trzeba go importować. - Klasa String w Javie jest klasą końcową i nie może mieć dzieci.
- Klasa String jest klasą niezmienną, co oznacza, że jej obiektów nie można zmieniać po ich utworzeniu. Wszelkie operacje na obiekcie String, których efektem byłby obiekt klasy String, spowodują utworzenie nowego obiektu.
- Ze względu na swoją niezmienność obiekty klasy String są bezpieczne dla wątków i mogą być używane w środowisku wielowątkowym.
- Każdy obiekt w Javie można przekonwertować na ciąg znaków za pomocą metody
toString
, którą wszystkie klasy Java dziedziczą z tej klasyObject
.
Praca z ciągiem Java
Jest to jedna z najczęściej używanych klas w Javie. Posiada metody analizy niektórych znaków w ciągu, porównywania i wyszukiwania ciągów, wyodrębniania podciągów, tworzenia kopii ciągu ze wszystkimi znakami konwertowanymi na małe i wielkie litery i inne. Listę wszystkich metod klasy String można znaleźć w oficjalnej dokumentacji . Java implementuje także prosty mechanizm łączenia (łączenia ciągów znaków), konwertowania elementów pierwotnych na ciąg znaków i odwrotnie. Przyjrzyjmy się kilku przykładom pracy z klasą String w Javie.Tworzenie ciągów
Najłatwiejszym sposobem utworzenia instancji klasy String jest przypisanie jej wartości literału łańcuchowego:String s = "I love movies";
Jednakże klasa String posiada wiele konstruktorów , które umożliwiają:
- utwórz obiekt zawierający pusty ciąg
- utwórz kopię zmiennej łańcuchowej
- utwórz ciąg znaków na podstawie tablicy znaków
- utwórz ciąg znaków na podstawie tablicy bajtów (biorąc pod uwagę kodowanie)
- itp.
Dodanie ciągu
Dodanie dwóch ciągów w Javie jest dość proste przy użyciu metody+
. Java umożliwia dodawanie do siebie zarówno zmiennych, jak i literałów łańcuchowych:
public static void main(String[] args) {
String day = "Dzień";
String and = "I";
String night = "Noc";
String dayAndNight = day + " " + and + " " + night;
}
Dodając obiekty klasy String do obiektów innych klas, redukujemy te ostatnie do postaci string. Konwersja obiektów innych klas na reprezentację w postaci ciągu znaków jest wykonywana poprzez niejawne wywołanie metody toString
na obiekcie. Zademonstrujmy to na następującym przykładzie:
public class StringExamples {
public static void main(String[] args) {
Human max = new Human(„Maks”);
String out = "obiekt javy: " + max;
System.out.println(out);
// Dane wyjściowe: Obiekt Java: Osoba o imieniu Max
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return „Człowiek z imieniem” + name;
}
}
}
Porównanie ciągów
Aby porównać ciągi, możesz użyć metodyequals()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("Test String".equals(x)); // true
}
Jeśli wielkość liter nie jest dla nas istotna przy porównywaniu ciągów, musimy zastosować metodę equalsIgnoreCase()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("test string".equalsIgnoreCase(x)); // true
}
Konwersja obiektu/prymitywu na ciąg znaków
Aby przekonwertować instancję dowolnej klasy Java lub dowolnego prymitywnego typu danych na reprezentację łańcuchową, możesz użyć metodyString.valueOf()
:
public class StringExamples {
public static void main(String[] args) {
String a = String.valueOf(1);
String b = String.valueOf(12.0D);
String c = String.valueOf(123.4F);
String d = String.valueOf(123456L);
String s = String.valueOf(true);
String human = String.valueOf(new Human("Alex"));
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(s);
System.out.println(human);
/*
Wynik:
1
12.0
123.4
123456
true
Osoba o imieniu Alex
*/
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return „Człowiek z imieniem” + name;
}
}
}
Konwersja ciągu na liczbę
Często trzeba przekonwertować ciąg na liczbę. Klasy opakowań typu pierwotnego mają metody, które służą dokładnie temu celowi. Wszystkie te metody zaczynają się od słowa parse. Rozważ tłumaczenie ciągu znaków na liczby całkowite (Integer
) i ułamkowe ( Double
) poniżej:
public static void main(String[] args) {
Integer i = Integer.parseInt("12");
Double d = Double.parseDouble("12.65D");
System.out.println(i); // 12
System.out.println(d); // 12.65
}
Konwertowanie kolekcji ciągów na reprezentację ciągów
Jeśli chcesz przekonwertować wszystkie elementy jakiejś kolekcji ciągów na reprezentację ciągów znaków za pomocą dowolnego ogranicznika, możesz użyć następujących metod klasy Java String:join(CharSequence delimiter, CharSequence... elements)
join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
delimiter
jest separatorem elementów i elements
jest instancją tablicy ciągów/kolekcji ciągów. Spójrzmy na przykład, w którym konwertujemy listę ciągów na ciąg znaków, oddzielając każdy z nich średnikiem:
public static void main(String[] args) {
List<String> people = Arrays.asList(
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodriguez",
"Hubert Farnsworth",
"Hermes Conrad",
"John D. Zoidberg",
"Amy Wong"
);
String peopleString = String.join("; ", people);
System.out.println(peopleString);
/*
Dane wyjściowe:
Philip J. Fry; Turanga Leela; Bender Zginanie Rodriguez; Huberta Farnswortha; Hermesa Konrada; Johna D. Zoidberga; Amy Wong
*/
}
Dzielenie ciągu na tablicę ciągów
Operację tę wykonujemy metodąsplit(String regex)
Separator jest wyrażeniem regularnym typu string regex
. W poniższym przykładzie wykonamy operację odwrotną do tej, którą wykonaliśmy w poprzednim przykładzie:
public static void main(String[] args) {
String people = "Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong";
String[] peopleArray = people.split("; ");
for (String human : peopleArray) {
System.out.println(human);
}
/*
Produkcja:
Philip J. Fry
Turanga Leela
Bender Bending Rodriguez
Hubert Farnsworth
Hermes Conrad
John D. Zoidberg
Amy Wong
*/
}
Określanie pozycji elementu w ciągu znaków
W języku Java String udostępnia zestaw metod określania pozycji znaku/podłańcucha w ciągu:indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
lastIndexOf(String str)
lastIndexOf(String str, int fromIndex)
ch
— symbol, którego szukasz (char
)str
- szukana frazafromIndex
— pozycja, z której należy szukać elementu- metody
indexOf
- zwracają pozycję pierwszego znalezionego elementu - metody
lastIndexOf
- zwracają pozycję ostatniego znalezionego elementu
A
, K
, Z
, Я
w alfabecie angielskim, ale pamiętajmy, że indeksowanie znaków w ciągu znaków w Javie zaczyna się od zera:
public static void main(String[] args) {
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println(alphabet.indexOf('A')); // 0
System.out.println(alphabet.indexOf('K')); // 10
System.out.println(alphabet.indexOf('Z')); // 25
System.out.println(alphabet.indexOf('Я')); // -1
}
Wyodrębnianie podciągu z ciągu
Aby wyodrębnić podciąg z łańcucha, klasa String w Javie udostępnia metody:substring(int beginIndex)
substring(int beginIndex, int endIndex)
public static void main(String[] args) {
String filePath = "D:\\Movies\\Futurama.mp4";
int lastFileSeparatorIndex = filePath.lastIndexOf('\\');
String fileName = filePath.substring(lastFileSeparatorIndex + 1);
System.out.println(fileName); //9
}
Konwertuj ciąg na wielkie/małe litery:
Klasa String udostępnia metody konwersji ciągu znaków na wielkie i małe litery:toLowerCase()
toUpperCase()
public static void main(String[] args) {
String fry = "Philip J. Fry";
String lowerCaseFry = fry.toLowerCase();
String upperCaseFry = fry.toUpperCase();
System.out.println(lowerCaseFry); // philip j. fry
System.out.println(upperCaseFry); // PHILIP J. FRY
}
Praca z tą klasą Java jest omawiana na początkowych poziomach kursu online JavaRush:
- Wprowadzenie do String znajduje się na poziomie 1, wykładzie 4 zadania Java Syntax
- Wewnętrzna struktura łańcucha, metoda podciągów jest badana na drugim poziomie, trzeci wykład zadania Java Multithreading
- Znajdowanie, pobieranie i usuwanie podciągu w ciągu jest omawiane na drugim poziomie, czwartym wykładzie zadania Java Multithreading
- Metodę String.format omówiono na poziomie 2, w wykładzie 6 zadania Java Multithreading
Dodatkowe źródła
Informacje o klasie String znajdują się także w innych artykułach społeczności JavaRush:- Ciągi w Javie — w tym artykule omówiono podstawy pracy z ciągami w Javie.
- Ciąg Java. Pytania i odpowiedzi na rozmowie kwalifikacyjnej, część 1 — w tym artykule omówiono pytania podczas rozmowy kwalifikacyjnej na ten temat
String
, a także przedstawiono odpowiedzi na pytania wraz z wyjaśnieniami i przykładami kodu. - Stringi w Javie (klasa java.lang.String) - w tym artykule dokonano głębszej analizy klasy String, a także omówiono zawiłości pracy z tą klasą.
GO TO FULL VERSION