Строки в Java
Строки в Java
★ Строка в Java — объект класса java.lang.String. Литерал "текст" создаёт объект в пуле строк (string pool) для экономии памяти при повторном использовании одинаковых литералов.
См. также: типы данных, ввод-вывод и кодировки.
Неизменяемость (immutability)
После создания содержимое String не меняется. «Изменение» создаёт новый объект:
String s = "hello";
s = s + " world"; // новая строка, старая доступна сборщику мусора
Плюсы: потокобезопасность, безопасное хранение в HashMap как ключ, предсказуемое поведение при передаче в методы.
Минус: конкатенация в цикле даёт O(n²) по копированию — используйте StringBuilder.
String, StringBuilder, StringBuffer
| Класс | Изменяемый | Потокобезопасный | Когда использовать |
|---|---|---|---|
String | нет | да (как объект) | Константы, ключи, возврат из API |
StringBuilder | да | нет | Сборка текста в одном потоке |
StringBuffer | да | да (устаревший подход) | Legacy-код; в новом коде — StringBuilder |
StringBuilder sb = new StringBuilder();
for (String part : parts) {
if (!sb.isEmpty()) sb.append(',');
sb.append(part);
}
String result = sb.toString();
С Java 11+ для простых случаев удобен String.join:
String csv = String.join(",", parts);
Сравнение строк
| Способ | Назначение |
|---|---|
equals | Сравнение содержимого |
equalsIgnoreCase | Без учёта регистра (локаль не учитывается — осторожно с Unicode) |
compareTo | Лексикографический порядок |
== | Сравнение ссылок, не содержимого |
if ("admin".equals(role)) { } // безопасно при null в role
if (Objects.equals(a, b)) { } // оба могут быть null
Для сортировки по правилам языка — Collator с локалью.
Форматирование
String.format и formatted (Java 15+):
String msg = String.format("User %s, balance %.2f", name, balance);
String msg2 = "User %s, balance %.2f".formatted(name, balance);
Спецификаторы: %s строка, %d целое, %f вещественное, %n перевод строки.
Text blocks (Java 15+) — многострочный текст без \n и конкатенации:
String json = """
{
"id": %d,
"name": "%s"
}
""".formatted(id, name);
В text block завершающие пробелы в строках по умолчанию удаляются; отступ выравнивается по самой левой непустой строке.
Полезные методы String
" hello ".trim(); // пробелы по краям (Unicode — см. strip)
" hello ".strip();
"a,b,c".split(",");
"path/file.txt".substring(5);
"index.html".endsWith(".html");
"ERROR: msg".startsWith("ERROR");
"abc".repeat(3); // "abcabcabc"
"hello".contains("ell");
isBlank() (Java 11) — пустая или только пробельные символы.
Регулярные выражения (обзор)
Класс java.util.regex:
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("order-42-item");
if (m.find()) {
String digits = m.group();
}
boolean ok = "user@example.com".matches(".+@.+\\..+");
String[] parts = "a;b;c".split(";");
Для сложной валидации email/телефонов предпочтительны специализированные библиотеки или Bean Validation в рекомендациях, а не разросшийся regex в коде.
Кодировки и байты
String в памяти — UTF-16 (пары char). При записи в файл или сеть нужна явная кодировка:
byte[] utf8 = text.getBytes(StandardCharsets.UTF_8);
String restored = new String(utf8, StandardCharsets.UTF_8);
На Windows пути и консоль часто дают сбои при смешении системной кодировки и UTF-8 — подробнее в ввод-вывод и конфигурациях JVM (file.encoding, native.encoding).
Производительность
- Не конкатенируйте
Stringв цикле —StringBuilderилиString.join. - Не вызывайте
+в hot path для сборки SQL/JSON — шаблонизаторы илиStringBuilder. - Интернирование (
intern) — только при доказанной необходимости; в modern JVM пул управляется иначе, чем в старых учебниках.
Строки и коллекции
Преобразование потока строк — Stream API:
List<String> upper = lines.stream()
.map(String::strip)
.filter(s -> !s.isEmpty())
.map(String::toUpperCase)
.toList();
Связанные материалы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Основы Java - устройство JDK/JVM, модель компиляции и базовые принципы платформонезависимого выполнения. Java — это объектно-ориентированный язык программирования общего назначения, который работает на принципах «напиши один раз, запускай в любом месте». Набор советов, правил, принципов и обычаев в разработке на этом языке. История Java — от проекта Green и Oak до OpenJDK, LTS-релизов и современной платформы (модули, records, виртуальные потоки). Библиотеки, фреймворки, инструменты сборки, тестирования, развёртывания и мониторинга. Что такое пакет и пакетная структура, как собираются проекты на Java. Справочник-шпаргалка по конфигурациям в Java — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Гайд по установке и настройке с написанием первой программы и её запуском. Практические примеры — консольные утилиты, композиция классов в мини-игре и первое Swing-приложение. Точки останова, пошаговое выполнение, панели Variables и Call Stack — практика отладки в IntelliJ IDEA. Кавычки, точки, запятые, скобки и прочие знаки препинания. Это полный справочник всех ключевых слов языка Java, включая основные, контекстные и зарезервированные слова.Основы языка Java
Что требуется знать перед началом изучения языка программирования Java
Рекомендации по разработке на Java
История языка Java
Экосистема Java-приложений
Структура и сборки Java-проектов
Справочник по конфигурациям в Java
Первая программа на Java
Простые приложения на Java
Отладка Java-кода в IDE
Синтаксис и пунктуация в Java
Ключевые слова в Java