Как записать строковый литерал в Java без экранирования кавычек

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

С момента выпуска Java 15 появилась возможность использования текстовых блоков, что позволяет вставлять кавычки в строковые литералы без нужды каждый раз их экранировать:

Java
Скопировать код
String json = """
{"ключ": "значение с "встроенными" кавычками"}
""";

Для использования данной функциональности, достаточно обрамить требуемую строку тремя кавычками и забыть об экранировании. Это значительно упрощает задачи, особенно при работе с JSON или многострочными текстами.

Кинга Идем в IT: пошаговый план для смены профессии

Глублокий анализ — текстовые блоки и другие возможности

Текстовый блок в Java — это элегантное решение проблемы экранирования кавычек. Однако, для эффективной работы со строками важно обратить внимание и на другие аспекты.

Текстовые блоки: путь к лучшей читаемости

Текстовые блоки были добавлены в официальный стабильный релиз Java 15 (до этого они были в фазе экспериментального использования) и сделали многострочный текст значительно более воспринимаемым.

Groovy: Семантическая удобность для проектов на Java

Если переход на Java 15 пока неприемлем, или вы ищете дополнительные инструменты для улучшения семантики, рассмотрите встраивание Groovy. В нём допускается использование литералов GString, позволяющих использовать кавычки напрямую, что может значительно улучшить читаемость кода.

groovy
Скопировать код
def canWeSpeak = "Конечно, мы можем! Здесь нет необходимости в "эскейпинге"!"

Заметка: статические поля для постоянных строковых литералов

Если вы часто используете какие-то конкретные строковые литералы, имеет смысл применять статические поля. Такой подход позволяет повысить производительность программы, предотвращая повторное создание одинаковых строк JVM.

"Сырые" строки в перспективе...

Будет полезно слежение за появлением литералов "сырых" строк, описанных в JEP 8196004, в последующих версиях Java. С их помощью работать с многострочными строками без их экранирования станет ещё проще.

Визуализация

Давайте сравним, как текстовые блоки меняют обычную практику:

Java
Скопировать код
String traditionalString = "Она сказала, \"Привет!\""; // Как хочется освободиться от "ковтунства экранирования"!
String textBlockString = """
                         Она сказала, "Привет!"
                         """; // Это уже и есть свобода выражений!
md
Скопировать код
До: 🧗‍♂️ – Преодолевать "полосу препятствий"
После: 🛤️ – С лёгкостью идти по "ровной дорожке"

Теперь мы можем оторваться от устарелого подхода к экранированию и перейти на новый уровень! 🎪 -> 🛣️

Основательное рассмотрение сценариев и ситуаций

Специфические символы – не менее важны

Строковые литералы не только про кавычки. А как же решения для управления переносами строк и табуляцией? Текстовые блоки красиво справляются со всем этим.

Java
Скопировать код
String javaPoem = """
                   Розы красные,
                   Символы табуляции – неприкасаемы;
                   Благодаря текстовым блокам, дружище,
                   Шутки становятся нашими, а не на тебе!
                   """

Конкатенация и текстовые блоки: нежная дружба

Сочетание текстовых блоков с традиционными строками требует особого внимания, чтобы не допустить синтаксических ошибок.

Подробности имеют значение

Текстовые блоки представляют собой новый подход к составлению строк и требуют привыкания. Их содержание начинается непосредственно после первой кавычки, и не требует управления дополнительными пробелами.

Традиционные строки тоже имеют значение!

Для конкретных коротких выражений традиционные строки с экранированием всё ещё могут оказаться более подходящим выбором. Имеет смысл поддерживать их использование, где это уместно.

Полезные материалы

  1. Глава 3. Лексическая структураОфициальная спецификация языка Java по строковым литералам.
  2. Символы (Учебные гайды Java) — Исчерпывающее руководство Oracle по работе со строками и символами в Java.
  3. Baeldung – Руководство по текстовым блокам Java — Подробная статья о текстовых блоках в Java.
  4. Stack Overflow – Многострочные строковые литералы в Java — Подробное обсуждение многострочных строк сообществом Java.
  5. JavaWorld – Обзор текстовых блоков в Java — Тщательный анализ функциональности текстовых блоков как в Java 13.