JavaRush /Курси /JAVA 25 SELF /Основні методи String

Основні методи String

JAVA 25 SELF
Рівень 9 , Лекція 3
Відкрита

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 перед обробкою.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ