1. Змінення рядків

Рядки в Java — це незмінювані об'єкти (immutable). Так зробили для того, щоб клас-рядок можна було оптимізувати й використовувати повсюдно. Наприклад, в колекції HashMap рекомендується використовувати як ключі тільки об'єкти незмінюваних типів.

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

Приміром, маємо дуже великий рядок і часто дописуємо щось у кінець цього рядка. У такій ситуації навіть колекція символів (ArrayList<Character>) може виявитися ефективнішою, ніж постійне повторне створення рядків і конкатенація об'єктів типу String.

Саме тому в мову Java все ж таки додали клас String, який можна змінювати. Він має назву StringBuilder.

Створення об'єкта

Щоб створити об'єкт StringBuilder на основі наявного рядка, слід виконати таку команду:

StringBuilder ім'я = new StringBuilder(рядок);

Щоб створити порожній змінюваний рядок, слід виконати таку команду:

StringBuilder ім'я = new StringBuilder();

Список методів

Клас StringBuilder має понад два десятки корисних методів. У цій таблиці наведено перелік найважливіших із них.

Метод Опис
StringBuilder append(obj)
Перетворює переданий об'єкт на рядок і додає до поточного рядка
StringBuilder insert(int index, obj)
Перетворює переданий об'єкт на рядок і вставляє всередину поточного рядка
StringBuilder replace(int start, int end, String str)
Замінює частину рядка, визначену інтервалом start..end, на переданий рядок
StringBuilder deleteCharAt(int index)
Видаляє з рядка символ у позиції index
StringBuilder delete(int start, int end)
Видаляє з рядка символи підрядка, визначеного інтервалом
int indexOf(String str, int index)
Шукає підрядок в поточному рядку
int lastIndexOf(String str, int index)
Шукає підрядок в поточному рядку, починаючи з кінця
char charAt(int index)
Повертає символ рядка, який знаходиться в позиції, визначеній індексом
String substring(int start, int end)
Повертає підрядок, визначений інтервалом
StringBuilder reverse()
Змінює порядок символів у рядку на зворотний
void setCharAt(int index, char)
Замінює символ рядка, визначений індексом, на переданий символ
int length()
Повертає довжину рядка (кількість символів)

Читайте далі короткий опис цих методів.


2. Короткий опис методів

Додавання до рядка

Для того щоб щось додати до змінюваного рядка (StringBuilder), потрібно скористатися методом append(). Приклад:

Код Опис
StringBuilder builder = new StringBuilder("Привіт");
builder.append("Бувай");
builder.append(123);
Привіт
ПривітБувай
ПривітБувай123

Перетворення на стандартний рядок

Для того щоб перетворити об'єкт StringBuilder на рядок типу String, потрібно просто скористатися методом toString(). Приклад:

Код Виведення на екран
StringBuilder builder = new StringBuilder("Привіт");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Привіт123

Видалення символу

Для того щоб видалити символ у змінюваному рядку, слід скористатися методом deleteCharAt(). Приклад:

Код Виведення на екран
StringBuilder builder = new StringBuilder("Привіт");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Првіт

Заміна частини рядка

Для заміни частини рядка на інший підрядок використовується метод replace(int begin, int end, String str). Приклад:

Код Виведення на екран
StringBuilder builder = new StringBuilder("Привіт");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
ПрHello!т

6
Задача
Модуль 1. Java Syntax,  13 рівень2 лекція
Недоступна
Жага швидкості
Відчуй себе інженером-конструктором автомобілів і знайди рішення, що допоможе відновити роботу заводу. Для цього ти маєш додати в конструкторах ініціалізацію полів відповідними параметрами. Якщо параметра немає, слід ініціалізувати поле значенням за замовчуванням. Для поля year — це поточний рік (43

3. Корисні приклади роботи з рядками

Як змінити порядок символів у рядку на зворотний?

Для цієї операції є спеціальний метод — reverse(). Приклад:

Код Виведення на екран
String str = "Привіт";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
тівирП

Клас StringBuffer

Є ще один клас — StringBuffer. Це аналог класу StringBuilder, але його методи мають модифікатор synchronized. А це означає, що до об'єкта StringBuffer можна звертатися з декількох ниток одночасно.

Але він працює значно повільніше, ніж StringBuilder. Такий клас може вам знадобитися, коли ви почнете активно вивчати багатонитковість у квесті Java Multithreading.


6
Задача
Модуль 1. Java Syntax,  13 рівень2 лекція
Недоступна
Багатосерійний підприємець
Спорудження будівлі планувалося під ресторан і успішно завершилося, але через деякий час власники вирішили переробити її під барбершоп. Нам потрібно зробити так, щоб будівля була універсальною та щоб її призначення можна було змінювати, не створюючи нового. Для цього створи метод initialize, який за