Строки
Строка — это текст
Для текста в Java используется тип String.
Строку можно записать прямо в коде между двойными кавычками и сохранить в переменную так же,
как число или логическое значение.
String language = "Java";
String greeting = "Привет!";
System.out.println(language);
System.out.println(greeting);
String не относится к примитивным типам, но на базовом уровне работать с ним очень просто:
создаём строку, передаём её в методы, соединяем с другими строками и вызываем у неё готовые операции.
Конкатенация строк
Строки можно соединять оператором +. Если рядом со строкой находится число,
логическое значение или другой тип, Java преобразует его в текст и продолжит склеивание.
String name = "Анна";
int lessons = 8;
String message = "Ученик: " + name + ", уроков: " + lessons;
System.out.println(message);
Важно помнить, что выражение вычисляется слева направо. Пока строка ещё не встретилась, числа участвуют в обычных арифметических операциях.
System.out.println(2 + 3 + " Java"); // 5 Java
System.out.println("Java " + 2 + 3); // Java 23
"Сумма: " + (2 + 3), а не полагаться на порядок конкатенации.
Длина и символы
У строки есть метод length(), который возвращает её длину.
Отдельный символ можно получить методом charAt(index).
Как и в массивах, индексация начинается с нуля.
String word = "Java";
System.out.println(word.length()); // 4
System.out.println(word.charAt(0)); // J
System.out.println(word.charAt(3)); // a
Последний допустимый индекс всегда на единицу меньше длины строки.
Например, для строки длиной 4 доступны индексы от
0 до 3.
Полезные операции со строками
Вместо ручной обработки каждого символа у String уже есть готовые методы.
Для начала достаточно знать несколько часто встречающихся операций:
substring(from, to)— взять часть строки;contains(text)— проверить, содержится ли фрагмент;startsWith(prefix)иendsWith(suffix)— проверить начало или конец;replace(oldText, newText)— заменить фрагменты;isEmpty()— проверить, что длина равна нулю;isBlank()— проверить, что строка пустая или состоит только из пробельных символов.
String path = "java/basics/strings";
System.out.println(path.substring(5, 11)); // basics
System.out.println(path.contains("strings")); // true
System.out.println(path.startsWith("java")); // true
System.out.println(path.replace("/", " -> "));
У substring(from, to) начальный индекс включается,
а конечный не включается. Такой же принцип границ уже встречался при работе с диапазонами индексов в массивах.
Строки неизменяемы
Одна из главных особенностей String: созданная строка не изменяет своё содержимое.
Методы вроде replace() или substring()
возвращают новую строку, а исходная остаётся прежней.
String text = "java";
String upper = text.toUpperCase();
System.out.println(text); // java
System.out.println(upper); // JAVA
Поэтому вызов метода сам по себе не «переписывает» переменную. Если результат нужен дальше, его нужно сохранить или сразу использовать.
String status = "draft";
status.replace("draft", "ready");
System.out.println(status); // draft
status = status.replace("draft", "ready");
System.out.println(status); // ready
Как сравнивать строки
Для проверки содержимого строк используется метод equals().
Оператор == для строк отвечает на другой вопрос: ссылаются ли переменные
на один и тот же объект. Поэтому для обычного сравнения текста на него полагаться нельзя.
String first = "Java";
String second = new String("Java");
System.out.println(first.equals(second)); // true
System.out.println(first == second); // false
equals().
Даже если == в каком-то примере вернул true,
это не делает его правильным способом сравнивать содержимое строк.
Специальные символы и многострочный текст
В обычном строковом литерале некоторые символы записываются через escape-последовательности.
Например, \n создаёт перевод строки,
\" — двойную кавычку,
а \\ — обратный слеш.
String message = "Первая строка\nВторая строка";
String quote = "Он сказал: \"Java\"";
System.out.println(message);
System.out.println(quote);
Если текста много и он занимает несколько строк, удобнее использовать text block — литерал между тройными кавычками.
Он позволяет сохранить многострочный текст без цепочки \n и большого количества экранирования.
String json = """
{
"language": "Java",
"level": "basic"
}
""";
System.out.println(json);
В результате String остаётся тем же типом данных: меняется только удобство записи литерала.
Для повседневного кода достаточно уверенно создавать строки, соединять их, читать отдельные символы,
использовать готовые методы и сравнивать содержимое через equals().