☕ Java

Строки и работа с текстом в Java 17: подробное руководство

Строки и работа с текстом в Java

Введение: зачем нам работать с текстом?

Представь, что ты программист, который создаёт приложения. Твоя программа постоянно общается с пользователем: читает его сообщения, выводит ответы, обрабатывает названия, хештеги, тексты песен и статьи. Всё это — строки (тип String).

Строка — это последовательность символов: букв, цифр, знаков. В Java строки — это не просто набор букв, а настоящий объект, который умеет делать много полезных вещей: находить части текста, менять регистр, удалять лишние пробелы и даже переворачивать текст задом наперёд.

Основной синтаксис

Строка создаётся очень просто:

String имя = "Твой текст";

В Java 17 строки можно соединять с помощью + (конкатенация):

String приветствие = "Привет, " + "друг!";
System.out.println(приветствие); // Выведет: Привет, друг!

Но самое интересное — это методы (команды) строк. Вот самые популярные:

МетодЧто делаетПример
length()Возвращает длину строки (количество символов)"Кот".length() → 3
charAt(i)Возвращает символ на позиции i (счёт с 0)"Кот".charAt(1) → 'о'
substring(a, b)Вырезает часть строки от a до b (не включая b)"Привет".substring(0,4) → "Прив"
toLowerCase()Переводит все буквы в маленькие"Java".toLowerCase() → "java"
toUpperCase()Переводит все буквы в большие"java".toUpperCase() → "JAVA"
trim()Удаляет пробелы в начале и конце строки" текст ".trim() → "текст"
indexOf(строка)Ищет подстроку и возвращает её позицию (или -1, если не нашел)"Hello".indexOf("ll") → 2
replace(что, на_что)Заменяет все вхождения одной строки на другую"кот".replace("к", "с") → "сот"
split(разделитель)Разбивает строку на массив строк по разделителю"яблоко,банан".split(",") → ["яблоко","банан"]

Разбор типичных задач (как в твоих примерах)

Задача 1: Хештег (обрезка текста)

Условие: Дан хештег #ЛучшийДеньДляПрограммирования. Нужно взять только первые 10 символов (без решётки).

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите хештег: ");
        String hashtag = scanner.nextLine();
        
        // Убираем решётку (первый символ)
        String безРешётки = hashtag.substring(1); 
        // Берём первые 10 символов
        String часть = безРешётки.substring(0, 10);
        
        System.out.println("Короткий хештег: #" + часть);
    }
}

Задача 2: Подсчёт слов в песне

Условие: Дан текст песни. Нужно посчитать количество слов (слова разделены пробелами).

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите текст песни:");
        String текст = scanner.nextLine();
        
        // Разбиваем строку по пробелам на массив слов
        String[] слова = текст.split(" ");
        
        System.out.println("Количество слов: " + слова.length);
    }
}

Задача 3: Обратное сообщение (переворот строки)

Условие: Напиши программу, которая переворачивает строку задом наперёд.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Введите сообщение: ");
        String сообщение = scanner.nextLine();
        
        String перевёрнутое = "";
        // Идём от последнего символа к первому
        for (int i = сообщение.length() - 1; i >= 0; i--) {
            перевёрнутое = перевёрнутое + сообщение.charAt(i);
        }
        
        System.out.println("Перевёрнутое сообщение: " + перевёрнутое);
    }
}

Частые ошибки новичков

  • Путают length() и length: У строки метод length() со скобками. У массива — свойство length без скобок.
  • Забывают, что счёт символов начинается с 0: "Кот".charAt(0) — это 'К', а не 'о'.
  • Ошибка при substring: Если начальный индекс больше конечного или выходит за длину строки, программа упадёт с ошибкой.
  • Не учитывают пробелы в начале и конце: Всегда используйте trim(), если пользователь мог случайно поставить лишний пробел.
  • Сравнивают строки через ==: Для строк пишите equals()! "Привет".equals("Привет") — правильно, а == сравнивает ссылки, а не содержимое.

Итоговый пример: NFT-анализатор

Задача: Ты создаёшь NFT-коллекцию. Название токена должно быть не короче 5 символов, содержать только буквы и цифры, и ты хочешь вывести его в верхнем регистре.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Придумай название для NFT: ");
        String название = scanner.nextLine();
        
        // Убираем лишние пробелы
        название = название.trim();
        
        // Проверка длины
        if (название.length() < 5) {
            System.out.println("Ошибка: название слишком короткое (нужно минимум 5 символов)");
            return;
        }
        
        // Проверка, что только буквы и цифры
        boolean только_буквы_цифры = true;
        for (int i = 0; i < название.length(); i++) {
            char символ = название.charAt(i);
            if (!Character.isLetterOrDigit(символ)) {
                только_буквы_цифры = false;
                break;
            }
        }
        
        if (!только_буквы_цифры) {
            System.out.println("Ошибка: название должно содержать только буквы и цифры");
            return;
        }
        
        // Преобразуем в верхний регистр
        String финальное = название.toUpperCase();
        
        System.out.println("✅ Токен готов к продаже!");
        System.out.println("Название: " + финальное);
        System.out.println("Длина: " + финальное.length() + " символов");
    }
}

Как это работает:

  • Сначала удаляем лишние пробелы (trim())
  • Проверяем длину (length())
  • Проходим по каждому символу (charAt()) и проверяем, буква это или цифра (Character.isLetterOrDigit())
  • Переводим всё в верхний регистр (toUpperCase())

Теперь ты знаешь основы работы со строками в Java 17. Пробуй решать задачи — текст вокруг нас, и управлять им очень интересно!