Клас String Java призначений для роботи з рядками Java. Всі рядкові літерали, визначені в програмі Java (наприклад, "abc") - це екземпляри класу String. Давай подивимося на його ключові характеристики:
- Клас реалізує інтерфейси
Serializable
таCharSequence
. Оскільки він входить до пакетаjava.lang
, його не потрібно імпортувати. - Клас String в Java - це final клас, який може мати нащадків.
- Клас String – immutable клас, тобто його об'єкти не можуть бути змінені після створення. Будь-які операції над об'єктом String, результатом яких має бути об'єкт класу String, призведуть до створення нового об'єкта.
- Завдяки своїй незмінності об'єкти класу String є потокобезпечними і можуть бути використані в багатопотоковому середовищі.
- Кожен об'єкт Java може бути перетворений на рядок через метод
toString
, успадкований всіма Java-класами від класуObject
.
Робота з Java String
Це один з найчастіше використовуваних класів Java. У ньому є методи для аналізу певних символів рядка, для порівняння та пошуку рядків, вилучення підрядків, створення копії рядка з переведенням всіх символів у нижній та верхній регістр та інші. Список всіх методів класу String можна вивчити в офіційній документації . Також Java реалізований нескладний механізм конкатенації (з'єднання рядків), перетворення примітивів у рядок і навпаки. Давай розглянемо деякі приклади роботи з класом String Java.Створення рядків
Найпростіше створити екземпляр класу String, надавши йому значення рядкового літералу:String s = "I love movies";
Однак у класу String є багато конструкторів , які дозволяють:
- створити об'єкт, що містить порожній рядок
- створити копію рядкової змінної
- створити рядок на основі масиву символів
- створити рядок на основі масиву байтів (з урахуванням кодувань)
- і т.д.
Складання рядків
Скласти два рядки Java досить просто, скориставшись оператором+
. Java дозволяє складати один з одним і змінні, і рядкові літерали:
public static void main(String[] args) {
String day = "День";
String and = "і";
String night = "Ніч";
String dayAndNight = day + " " + and + " " + night;
}
Складаючи об'єкти класу String з іншими класами, ми наводимо останні до рядкового виду. Перетворення об'єктів інших класів до рядкового подання виконується через неявний виклик методу toString
об'єкта. Продемонструємо це на наступному прикладі:
public class StringExamples {
public static void main(String[] args) {
Human max = new Human("Макс");
String out = "Java об'єкт: " + max;
System.out.println(out);
// Висновок: Java об'єкт: Людина з ім'ям Макс
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return "Людина з ім'ям" + name;
}
}
}
Порівняння рядків
Для порівняння рядків можна скористатися методомequals()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("Test String".equals(x)); // true
}
Коли при порівнянні рядків нам не важливий регістр, потрібно використовувати метод equalsIgnoreCase()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("test string".equalsIgnoreCase(x)); // true
}
Переведення об'єкта/примітиву до рядка
Для перекладу екземпляра будь-якого Java-класу або будь-якого примітивного типу даних до рядкового подання можна використовувати методString.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);
/*
Висновок:
1
12.0
123.4
123456
true
Людина з ім'ям Alex
*/
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return "Людина з ім'ям" + name;
}
}
}
Переведення рядка до числа
Часто буває потрібно перевести рядок у число. У класів обгорток примітивних типів є методи, які служать саме для цієї мети. Усі ці методи починаються зі слова parse. Розглянемо нижче переклад рядка в цілочислове (Integer
) та дробове ( Double
) числа:
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
}
Переклад колекції рядків до рядкового подання
Якщо потрібно перетворити всі елементи деякої колекції рядків до рядкового подання через довільний роздільник, можна використовувати такі методи класу String Java:join(CharSequence delimiter, CharSequence... elements)
join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
delimiter
– роздільник елементів, а elements
– масив рядків / екземпляр колекції рядків. Розглянемо приклад, у якому ми перетворимо список рядків у рядок, розділяючи кожну крапку з комою:
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);
/ *
Висновок:
Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong
*/
}
Розбиття рядка на масив рядків
Цю операцію виконує методsplit(String regex)
Як роздільник виступає рядкове регулярне вираз regex
. У прикладі нижче зробимо операцію, обернену до тієї, що ми виконували в попередньому прикладі:
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);
}
/ *
Висновок:
Philip J. Fry
Turanga Leela
Bender
Bending Rodriguez
Hubert
Farnsworth
Hermes
}
Визначення позиції елемента у рядку
У мові Java String надає набір методів визначення позиції символу/подстроки в рядку: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
- Шуканий символ (char
)str
- Шуканий рядокfromIndex
- позиція з якою потрібно шукати елемент- методи
indexOf
– повертають позицію першого знайденого елемента - методи
lastIndexOf
– повертають позицію останнього знайденого елемента
A
, K
, Z
, Я
в англійському алфавіті, але матимемо на увазі, що індексація символів у рядку Java починається з нуля:
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
}
Вилучення підрядка з рядка
Для вилучення підрядки з рядка клас String Java надає методи: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
}
Переведення рядка у верхній/нижній регістр:
Клас String надає методи для переведення рядка у верхній та нижній регістри: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
}
Робота з цим класом Java вивчається на початкових рівнях онлайн-курсу JavaRush:
- Знайомство зі String наводиться на 1-му рівні, 4-ої лекції квесту Java Syntax
- Внутрішній пристрій String, метод substring вивчаються на 2-му рівні, 3-ї лекції квесту Java Multithreading
- Пошук, отримання, видалення підрядки в String вивчаються на 2-му рівні, 4-й лекції квесту Java Multithreading
- Метод String.format розглядається на 2-му рівні, 6-й лекції квесту Java Multithreading
Додаткові джерела
Інформація про клас String також наводиться в інших статтях JavaRush:- Рядки в Java - стаття розкриває деякі основи роботи з рядками в Java.
- Java String. Питання до співбесіди та відповіді на них, ч.1 — у цій статті розглядаються питання до співбесіди на тему
String
, а також даються відповіді на запитання з поясненнями та прикладами коду. - Рядки в Java (class java.lang.String) - у цій статті наводиться більш глибокий аналіз класу String, а також розглядаються тонкощі роботи з цим класом.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ