1. Пристрій класу String
Сьогодні ми поговоримо про клас String. Клас String — найпопулярніший клас у Java після типу int. Використовується повсюдно. У нього є купа корисних методів, які краще знати, ніж не знати.
Клас String — єдиний клас, окрім примітивних типів, літерали якого можна використовувати у switch; компілятор по-особливому опрацьовує додавання рядків та об'єктів; об'єкти String специфічно зберігаються в пам'яті. Загалом, клас String — це дуже специфічний клас.
Також у класу String є багато супутніх класів, основна мета яких — ще більше спростити роботу з рядками в Java. Коли ти вивчиш усе це, тобі дійсно стане набагато простіше робити багато речей. Ну а почнемо ми з самого серця цієї екосистеми — пристрою класу String.
Масив символів
А побудований клас String насправді дуже просто: всередині нього знаходиться масив символів (char), який зберігає всі символи рядка. Ось так, наприклад, зберігається слово «Привіт»:
Насправді все трохи не так. Оскільки клас String дуже важливий, у ньому використовується дуже багато оптимізацій, і дані зберігаються всередині не у вигляді масиву символів, а просто у вигляді масиву байтів.
2. Методи класу String
У класу String дуже багато методів: одних лише конструкторів у нього 18 штук! Тому нижче ми наведемо лише найосновніші з них:
| Методи | Опис |
|---|---|
|
Повертає кількість символів у рядку |
|
Перевіряє, чи рядок == порожній рядок |
|
Перевіряє, що в рядку — тільки пробільні символи: пробіл, tab, enter і т.д. |
|
Повертає символ, який стоїть на index-позиції у рядку. |
|
Повертає масив символів (копію), з яких складається рядок |
|
Перетворює рядок на набір байтів і повертає масив байтів. |
|
Розділяє рядок на кілька підрядків. |
|
Склеює разом кілька підрядків |
|
Поміщає рядок в пул StringPool. |
Більше про конструктори можна дізнатись зі статті Навіщо потрібен конструктор?
Давайте напишемо програму, яка перетворює шлях до файлу з Unix Style у Windows Style. Unix як розділювач директорій використовує символ /, Windows — символ \.
Рішення 1 — використання масиву char’ів
| Код | Примітки |
|---|---|
|
Створення об'єкта Scanner Читання рядка з консолі Перетворення рядка на масив символів Цикл по символах Якщо символ дорівнює /,замінюємо його на \. Не забуваємо про екранування.Створюємо новий рядок на основі масиву символів. Виводимо рядок на екран. |
Рішення 2 — використання методів split() та join():
| Код | Примітки |
|---|---|
|
Створення об'єкта Scanner Читання рядка з консолі Перетворення рядка на масив рядків. Як розділювач використовується символ / (додаткові два слеші – це наслідок подвійного екранування).Об'єднуємо всі рядки з масиву рядків, як розділювач використовується символ \ (ми бачимо його екранованим).Виводимо рядок на екран. |
Рішення 3 — використання методу replace(char oldChar, char newChar):
| Код | Примітки |
|---|---|
|
Створення об'єкта Scanner Читання рядка з консолі Просто замінюємо один символ на інший (другий — екранований) Виводимо рядок на екран. |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ