1. Метод length(): скільки символів у рядку?
Метод length() повертає кількість символів у рядку. Це не те саме, що «кількість байтів» (особливо якщо в рядку є емодзі чи символи Unicode), але для більшості завдань — саме те, що потрібно.
Приклад використання:
String name = "Василиса";
int length = name.length();
System.out.println("Кількість літер в імені: " + length); // 8
Навіщо це потрібно:
- Перевірити, чи не ввів користувач порожній рядок.
- Перевірити мінімальну/максимальну довжину пароля.
- Дізнатися, скільки символів залишилося до обмеження (наприклад, у SMS чи твіті).
Приклад: перевірка на порожній рядок
String input = "";
if (input.length() == 0)
{
System.out.println("Рядок порожній!");
}
Порада: щоб перевірити, чи рядок порожній, є також метод isEmpty(), але про нього — трохи згодом.
Короткий FAQ:
- Метод length() не приймає аргументів (дужки завжди порожні).
- Якщо рядок складається з пробілів, вони теж вважаються символами!
- Якщо рядок дорівнює null, виклик length() призведе до NullPointerException — спочатку перевіряйте на null.
2. Метод substring(): витягуємо частину рядка
Метод substring() дає змогу отримати підрядок — «вирізати» фрагмент за вказаними індексами.
Є дві основні форми виклику:
- str.substring(startIndex) — з позиції startIndex до кінця рядка.
- str.substring(startIndex, endIndex) — з позиції startIndex до endIndex (не включаючи символ з індексом endIndex).
Увага: індексація символів у рядку починається з 0.
Приклади використання
Приклад 1: Отримати перші три літери імені
String name = "Василиса";
String firstThree = name.substring(0, 3); // "Вас"
System.out.println(firstThree);
Приклад 2: Отримати розширення файлу
String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);
Приклад 3: Останні 4 символи рядка
String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("Останні 4 цифри: " + lastFour);
Особливості й нюанси
- Некоректні індекси (startIndex < 0, endIndex > довжини рядка, startIndex > endIndex) спричиняють StringIndexOutOfBoundsException.
- Метод завжди повертає новий рядок — вихідний не змінюється.
- Друга форма (з двома параметрами) не включає символ з індексом endIndex.
String str = "abcdef";
// Індекси: 0 1 2 3 4 5
str.substring(1, 4) → "bcd" // символи з індексами 1, 2, 3
substring(start, end)
3. Метод indexOf(): шукаємо символ або підрядок
Метод indexOf() шукає позицію (індекс) першого входження заданого символу або підрядка.
- Якщо знайдено — повертає індекс (від 0).
- Якщо не знайдено — повертає -1.
Приклади використання
Приклад 1: Знайти першу крапку в електронній адресі
String email = "ivan.petrenko@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("Перша крапка на позиції: " + dotIndex); // 4
Приклад 2: Знайти підрядок
String text = "Я люблю Java!";
int index = text.indexOf("Java");
System.out.println(index); // 8
Приклад 3: Знайти символ після певної позиції
String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("Друга 'a' на позиції: " + secondA);
Особливості й нюанси
- Якщо символ або підрядок трапляються кілька разів, повертається індекс першого входження.
- Для пошуку останнього входження використовуйте lastIndexOf().
- Для символу використовуйте одинарні лапки: 'a'; для підрядка — подвійні: "abc".
Приклад: пошук розширення файлу
String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Розширення файлу: " + extension); // "docx"
4. Метод charAt(): отримуємо символ за індексом
Метод charAt(index) повертає символ рядка за вказаним індексом.
Приклади використання
Приклад 1: Перевірити першу літеру рядка
String city = "Львів";
char first = city.charAt(0); // 'Л'
System.out.println("Перша літера: " + first);
Приклад 2: Перевірити, чи рядок починається з великої літери
String word = "Java";
if (Character.isUpperCase(word.charAt(0)))
{
System.out.println("Слово починається з великої літери!");
}
Приклад 3: Перебрати всі символи рядка
String text = "Привіт";
for (int i = 0; i < text.length(); i++)
{
System.out.println("Символ #" + i + ": " + text.charAt(i));
}
Особливості й нюанси
- Індекс поза діапазоном (наприклад, -1 або >= довжини) призведе до StringIndexOutOfBoundsException.
- Метод повертає значення типу char, а не рядок.
5. Метод toCharArray(): перетворюємо рядок на масив символів
Метод toCharArray() — простий спосіб перетворити рядок на масив символів (char[]). Корисно для посимвільної обробки, сортування, перевірки тощо.
Приклад використання:
String text = "Hello";
char[] characters = text.toCharArray();
for (char c : characters)
{
System.out.println(c);
}
// Виведення:
// H
// e
// l
// l
// o
Навіщо це потрібно:
- Обробка символів: масиви зручніші для посимвільної логіки (наприклад, перевірка на анаграми).
- Сумісність: деякі API очікують char[] як аргумент.
6. Метод replace(): замінюємо підрядки
Метод replace(CharSequence target, CharSequence replacement) замінює всі входження підрядка target на replacement. Повертає новий рядок, вихідний не змінюється.
Приклад використання:
String sentence = "Я люблю програмування на Java.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Виведення: Я люблю програмування на Java 25.
String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Виведення: support[at]company.com
Особливості й нюанси
- Замінюються усі входження.
- String незмінний: replace() повертає новий рядок.
- Для складних правил використовуйте replaceAll() з регулярним виразом.
7. Методи trim() і strip(): позбуваємося пробілів
Обидва методи видаляють «невидимі» символи на початку та в кінці рядка.
- trim() — класичний метод: видаляє пробіли, табуляції, перенесення рядка і частину керівних символів, але не всі пробіли Unicode.
- strip() — сучасний метод: враховує всі види пробілів за стандартом Unicode. Переважний у нових проєктах.
Приклад використання:
String s1 = " Привіт, світ! ";
System.out.println(s1.trim());
// Виведення: "Привіт, світ!"
String s2 = " \u2005 Java 11 \u2005 "; // \u2005 — це Unicode-пробіл
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Виведення:
// trim(): Java 11
// strip(): Java 11
Навіщо це потрібно:
- Очищення користувацького введення від зайвих пробілів.
- Нормалізація даних із файлів/логів перед обробкою.
8. Практика: розв’язуємо завдання
Завдання 1: Перевірка довжини пароля
String password = "qwerty";
if (password.length() < 8)
{
System.out.println("Пароль занадто короткий!");
}
else
{
System.out.println("Пароль підходить.");
}
Завдання 2: Витягнення імені з ПІБ
String fullName = "Іваненко Іван Іванович";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Імʼя: " + name); // "Іван"
Завдання 3: Перевірка, що рядок починається з певної літери
String surname = "Петренко";
if (surname.charAt(0) == 'П')
{
System.out.println("Прізвище починається з літери П");
}
Завдання 4: Отримати домен з email
String email = "ivan.ivanenko@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Домен: " + domain); // "gmail.com"
Завдання 5: Знайти всі входження літери 'а' у рядку
String s = "абракадабра";
int pos = s.indexOf('а');
while (pos != -1)
{
System.out.println("Літера 'а' знайдена на позиції: " + pos);
pos = s.indexOf('а', pos + 1); // шукаємо з останньої знайденої позиції
}
9. Типові помилки при роботі з методами String
Помилка № 1: Вихід за межі рядка
Дуже часто плутають індекси й звертаються до неіснуючого символу або підрядка.
String s = "Java";
char c = s.charAt(4); // Помилка! Індекси 0..3
String s = "Hello";
String sub = s.substring(3, 10); // Помилка! Довжина рядка — 5
Помилка № 2: Плутанина із включенням чи невключенням індексу
Метод substring(start, end) включає символ з індексом start, але не включає символ з індексом end.
Помилка № 3: Очікування, що indexOf поверне щось інше, ніж -1 за відсутності підрядка
Перевіряйте результат перед використанням, особливо якщо потім застосовуєте його в substring.
Помилка № 4: Неправильна обробка порожніх рядків
Якщо рядок порожній (""), виклики charAt(0) або substring(0, 1) призведуть до помилки. Спочатку перевіряйте довжину.
Помилка № 5: Робота з null-рядками
Якщо рядок дорівнює null, виклик будь-якого методу (length(), substring() тощо) викличе NullPointerException. Завжди перевіряйте на null перед обробкою.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ