JavaRush /Курси /Java Syntax Zero /Будова класу String

Будова класу String

Java Syntax Zero
Рівень 10 , Лекція 4
Відкрита

1. Будова класу String

Сьогодні розмова піде про клас String. Клас String — найпопулярніший клас у Java після типу int. Він використовується скрізь і має купу корисних методів, які варто знати.

Клас String — це єдиний клас, крім примітивних типів, літерали якого можна використовувати в операторах switch; компілятор в особливий спосіб обробляє додавання рядків і об'єктів; об'єкти String в особливий спосіб зберігаються в пам'яті. Клас String — дійсно особливий клас.

Крім того, клас String має купу класів-сателітів, які спрощують роботу з рядками в Java. Коли ви все це вивчите, ви зможете легко робити багато речей. Ну а почнемо ми з найголовнішого — з будови класу String.

Масив символів

Клас String насправді влаштований дуже просто: він містить масив символів (char), де зберігаються всі символи рядка. Отак, наприклад, зберігається слово «Привіт»:

Важливо!

Насправді все так, але трохи не так. Оскільки клас String дуже важливий, у ньому використовується дуже багато оптимізацій, і дані в ньому зберігаються не у вигляді масиву символів, а просто у вигляді масиву байтів.


2. Методи класу String

Клас String має дуже багато методів: самих лише конструкторів 18 штук! Тому ми наведемо тільки найважливіші методи.

Методи Опис
int length()
Повертає кількість символів у рядку
boolean isEmpty()
Перевіряє, чи рядок є порожнім
boolean isBlank()
Перевіряє, чи рядок містить тільки пробіли або керівні символи (tab, enter тощо)
char charAt(int index)
Повертає символ, який знаходиться в рядку на позиці з номером index
char[] toCharArray()
Повертає масив символів (копію), з яких складається рядок
byte[] getBytes()
Перетворює рядок на набір байтів і повертає масив байтів
String[] split(String regex)
Розділяє рядок на кілька підрядків
String join(CharSequence delimiter, elements)
Склеює в один рядок кілька підрядків
String intern()
Поміщає рядок у пул StringPool

Докладну інформацію про конструктори див. у статті «Навіщо потрібен конструктор?»

Спробуймо написати програму, що перетворює шлях до файлу у форматі ОС Unix на формат, який використовується в ОС Windows. В ОС Unix роздільником директорій є символ /, а в ОС Windows — символ \.

Спосіб 1 — використання масиву символів (char)

Код Примітки
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);
Створення об'єкта Scanner
Читання рядка з консолі

Перетворення рядка на масив символів
Цикл по символах
Якщо символ дорівнює /,
замінити його на \. Не забуваємо про екранування.

Створюємо новий рядок на основі масиву символів.
Виводимо рядок на екран.

Спосіб 2 — використання методів split() і join():

Код Примітки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

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


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


System.out.println(result);
Створення об'єкта Scanner
Читання рядка з консолі

Перетворення рядка на масив рядків. Як роздільник використовується символ / (дві додаткові скісні риски — це результат подвійного екранування).
Об'єднуємо всі рядки з масиву рядків; як роздільник використовується символ \ (ми бачимо його екранованим).

Виводимо рядок на екран.

Спосіб 3 — використання методу replace(char oldChar, char newChar):

Код Примітки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

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

System.out.println(result);
Створення об'єкта Scanner
Читання рядка з консолі

Просто замінюємо один символ на другий
(другий символ екрановано)
Виводимо рядок на екран.
Коментарі (8)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
⭐ Ihor Voloshyn ⭐ Рівень 16
30 січня 2026
не зрозуміло звідки взялися конструктори: "Більше про конструктори можна дізнатись зі статті Навіщо потрібен конструктор?"
IronMan57 Рівень 28
7 грудня 2024
Зверніть увагу, що в методі split параметром виступає не звичайний рядок, а рядок, що представляє собою так названий "регулярний вираз". Не знаючи цього, в задачі до слідуючої лекції я намагався розбити рядок використовуючи слідуючу команду:

String[] urlElements = url.split(".");
і отримував замість масиву рядків пустий масив. Як виявилось, причина була в тому, що в регулярних виразах символ крапки означає любий символ. Тому, якщо потрібно розбити один рядок на підрядки з крапкою в якості роздільника, то крапку в аргументі методу split потрібно екранувати, причому подвійним зворотнім слешем. Наприклад, таким чином:

String[] urlElements = url.split("\\.");
Anonymous #3425794 Рівень 1
24 січня 2025
Яка чудове спостереження, дуже тобі дякую!
Гаркін Рівень 14
31 березня 2024
Фраза "Клас String — це єдиний клас, крім примітивних типів, літерали якого можна використовувати в операторах switch" мені сподобалась. Ось тільки одне запитання - коли ми проходили оператори switch?!
Ростислав Рівень 32
5 листопада 2024
теж саме подумав)
Yevhenii Рівень 17
28 січня 2023
Третій спосіб самий зрозумілий, також його запам'ятати найлегше
Харченко Иван Рівень 15
5 лютого 2022
Як на мене - останній 3-й спосіб найзручніший
Roma Chernesh Рівень 16
30 грудня 2022
Та ото зрозуміло) Думається мені, що нам показують різні способи для того, щоб нас привчити тримати в голові різні способи вирішення завдання. Бо не завжди пам'ятаєш "який там я колись бачив дуже зручний метод", а до голови приходять згадки лише чогось некрасивого, але працюючого.