Об’єкт String є одним із найважливіших і найбільш використовуваних типів даних у мові програмування Java. Він представляє собою незмінний (immutable) об’єкт, який зберігає послідовність символів, та широко використовується для роботи з текстовою інформацією. У цій статті ми розглянемо основні особливості класу String, його методи та як ефективно працювати з текстом у Java.
У Java клас String використовується для зберігання й маніпуляції текстовими даними. Усі рядки у Java є об’єктами класу String, навіть якщо вони створені за допомогою літерального значення. Клас String знаходиться у пакеті java.lang, тому імпортувати його вручну не потрібно.
String text = "Привіт, світ!";JavaЯкщо ми створюємо рядок таким чином, він зберігається у спеціальному пулі рядків (String pool), що дозволяє економити пам’ять і зменшувати дублювання однакових рядків.
Особливості String у Java
Незмінність (Immutable)
Об’єкти класу String є незмінними. Це означає, що після створення об’єкта його вміст не може бути змінений. Будь-яка операція, яка “змінює” рядок (наприклад, додавання нових символів), насправді створює новий об’єкт String.
String text = "Hello";
text = text + " World"; // створюється новий об'єкт "Hello World"JavaПул рядків (String Pool)
У Java існує спеціальна область пам’яті, яка називається String Pool. Якщо створювати рядок за допомогою літералів, JVM перевіряє, чи існує вже такий рядок у пулі. Якщо так, то використовується існуючий об’єкт, а не створюється новий. Це підвищує ефективність використання ресурсів.
String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2); // true (один і той самий об'єкт у пам'яті)JavaПорівняння рядків
Через незмінність рядків, для порівняння їх значень слід використовувати метод equals(), а не оператор ==. Оператор == перевіряє, чи посилаються два об’єкти на одну і ту саму область пам’яті, тоді як equals() перевіряє рівність вмісту рядків.
String s1 = new String("Java");
String s2 = "Java";
System.out.println(s1 == s2); // false (різні об'єкти)
System.out.println(s1.equals(s2)); // true (однаковий вміст)
JavaОсновні методи класу String
Клас String пропонує багато методів для роботи з рядками. Ось деякі з них:
Довжина рядка:
Метод length() повертає кількість символів у рядку.
String str = "Java";
System.out.println(str.length()); // 4JavaОтримання символа за індексом:
Метод charAt(int index) повертає символ за визначеним індексом.
String str = "Hello";
System.out.println(str.charAt(1)); // eJavaПошук:
Метод contains() перевіряє, чи міститься певний підрядок у рядку.
String str = "Java Programming";
System.out.println(str.contains("Java")); // trueJavaКонкатенація рядків:
Метод concat() використовується для об’єднання рядків.
String str1 = "Hello";
String str2 = "World";
String result = str1.concat(" ").concat(str2);
System.out.println(result); // Hello WorldJavaПорівняння:
Метод equals() перевіряє, чи мають два рядки однаковий вміст, а equalsIgnoreCase() ігнорує різницю між великими та малими літерами під час порівняння.
String str1 = "java";
String str2 = "Java";
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // trueJavaПошук індексу:
Методи indexOf() і lastIndexOf() знаходять перший або останній індекс появи символа або підрядка.
String str = "Programming";
System.out.println(str.indexOf("g")); // 3
System.out.println(str.lastIndexOf("g")); // 9JavaОбрізання пробілів:
Метод trim() видаляє пробіли на початку і в кінці рядка.
String str = " Hello World ";
System.out.println(str.trim()); // "Hello World"JavaЗаміна символів:
Метод replace() замінює всі входження певного символа або підрядка на інший.
String str = "Hello, Java";
System.out.println(str.replace("Java", "World")); // Hello, WorldJavaПеретворення в нижній/верхній регістр:
Методи toLowerCase() і toUpperCase() використовуються для зміни регістру символів.
String str = "Java";
System.out.println(str.toLowerCase()); // java
System.out.println(str.toUpperCase()); // JAVAJavaА тепер давайте подивимося на деякі операції які можна робити з об’єктом String.
Рядки в Java можна створювати кількома способами:
String s1 = "Привіт"; // Літеральний спосіб
String s2 = new String("Світ"); // Через конструктор (подібний спосіб менш ефективний)
char[] chars = {'H', 'e', 'l', 'l', 'o'};
String s3 = new String(chars); // Через масив символів
String emptyString = ""; // Порожній рядокJavaДодавання (конкатенація) рядків можна зробити за допомогою оператора +, методу concat() або через StringBuilder/StringBuffer.
Через оператор +
String name = "Ольга";
String message = "Привіт, " + name + "! Як твої справи?";
System.out.println(message);
// Виведе: Привіт, Ольга! Як твої справи?JavaЧерез метод concat()
String str1 = "Java ";
String str2 = "8";
String result = str1.concat(str2); // Результат: "Java 8"
System.out.println(result);JavaЧерез StringBuilder (ефективний спосіб для циклів)
StringBuilder sb = new StringBuilder("Java");
sb.append(" 8").append(" Rocks!");
System.out.println(sb.toString()); // Результат: "Java 8 Rocks!"JavaДля роботи з підрядками використовуються методи substring().
String text = "Java 8 є потужною";
String sub1 = text.substring(5); // Вирізає з 5-ї позиції до кінця: "8 є потужною"
String sub2 = text.substring(5, 10); // Вирізає тільки з 5-ї до 10-ї: "8 є п"
System.out.println(sub1);
System.out.println(sub2);JavaПерш ніж виконувати операції з рядками, корисно перевірити, чи рядок не є null або порожнім.
String str = null;
// Перевірка
if (str == null || str.isEmpty()) {
System.out.println("Рядок є порожнім або null");
} else {
System.out.println("Рядок має значення: " + str);
}JavaВикористання Objects для перевірки
import java.util.Objects;
String str = null;
if (Objects.isNull(str)) {
System.out.println("Рядок є null");
}JavaПеревірка на isBlank() (починаючи з Java 11)
Можна також використовувати новий метод isBlank, але він доступний тільки з Java 11+.
Щоб дізнатись довжину рядка, використовується метод length().
String str = "Програмування";
int length = str.length();
System.out.println("Довжина рядка: " + length); // Виведе: 14JavaПеревірка на вміст підрядка
Метод contains() дозволяє перевірити, чи рядок містить певний текст.
String text = "Java 8 є найкращою";
if (text.contains("Java")) {
System.out.println("У рядку є слово 'Java'");
}JavaПошук позиції підрядка
Методи indexOf() і lastIndexOf() допомагають знайти позицію підрядка.
String text = "Java 8 є найкращою";
if (text.contains("Java")) {
System.out.println("У рядку є слово 'Java'");
}JavaЗаміна частин рядка
Для заміни використовується метод replace() або регулярні вирази.
String text = "Java 8";
String replaced = text.replace("8", "11"); // Заміна всіх "8" на "11"
System.out.println(replaced); // Виведе: "Java 11"JavaРозбиття рядка
Для розбиття рядка на частини використовується метод split().
String text = "Java,Python,C++";
String[] languages = text.split(","); // Розділимо за комою
for (String lang : languages) {
System.out.println(lang);
}
// Виведе:
// Java
// Python
// C++JavaПеретворення інших типів у String
Використання методу String.valueOf()
int number = 42;
String numberStr = String.valueOf(number); // Конвертує int в рядок
System.out.println(numberStr); // Виведе: "42"JavaСучасний підхід до роботи з Optional (Java 8)
Щоб уникнути NullPointerException, можна використовувати Optional.
import java.util.Optional;
Optional<String> optionalStr = Optional.ofNullable(null);
String result = optionalStr.orElse("Значення за замовчуванням");
System.out.println(result); // Виведе: "Значення за замовчуванням"JavaІнші корисні методи
startsWith(): перевіряє, чи рядок починається з певного тексту.endsWith(): перевіряє, чи рядок закінчується на певний текст.equals()іequalsIgnoreCase(): порівняння рядків (з урахуванням або без урахування регістру).repeat()(доступно з Java 11): повторює рядок.
Об’єкт String у Java є невід’ємною частиною роботи з текстовими даними. Його функціональність, разом із багатим набором методів, дозволяє ефективно працювати з рядками навіть у складних завданнях. Завдяки своїй незмінності, цей клас забезпечує високий рівень безпеки даних і прогнозовану поведінку, хоча для інтенсивних маніпуляцій з текстом варто використовувати й інші класи, як-от StringBuilder чи StringBuffer.
У Java 8 String надає великий набір методів для роботи з текстовими даними. Ми розглянули різні аспекти роботи з рядками: додавання, вирізання, перевірка на null, пошук підрядків, заміну, модифікацію регістрів тощо.
Ефективне використання можливостей String дасть змогу писати чистий, зрозумілий та продуктивний код.





