Многострочная строка Java (с примерами)

Многострочные строки позволяют создавать строковые литералы, охватывающие несколько строк исходного кода. Написание многострочных строк в Java может осуществляться по-разному в зависимости от используемой версии Java.

Например, Java 15(и более поздние версии) имеют встроенную поддержку многострочных строк через Text Blocks. До Java 15 конкатенация строк была наиболее часто используемым способом создания многострочных строк.

Java-версия Предпочтительный метод создания многострочных строк
Java 15 и более поздние версии Текстовые блоки
Java 8 — Java 14 String.join(), StringJoiner или Collectors.joining()
До Java 8 Конкатенация строк

Давайте рассмотрим, как писать многострочные строки в Java 8 и Java 15 и более поздних версиях.

1. Многострочные строки с текстовыми блоками [Java 15+]

Текстовые блоки Java были включены в Java 13( JEP 355 ) и Java 14( JEP 368 ) в качестве предварительных функций. Они стали стандартной функцией в Java 15( JEP 378 ). Текстовый блок лаконичен, легко обновляется и понятен.

Синтаксис текстовых блоков довольно прост.

  • Текстовый блок состоит из нескольких строк текста и использует три символа двойных кавычек(«»») в качестве открывающего и закрывающего разделителей.
  • За открывающими тремя двойными кавычками всегда следует символ конца строки. Содержимое должно начинаться только на следующей строке.
  • Закрывающие три символа двойных кавычек могут находиться на отдельной строке или добавляться к последней добавленной строке.
  • Если текстовое содержимое содержит одинарные или двойные кавычки, то экранировать их не нужно.

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

String content = """Line 1'Line 2'"Line 3"Line 4""";System.out.println(content);

Вывод программы:

Line 1'Line 2'"Line 3"Line 4

С текстовыми блоками вы просто пишете строку в исходном коде так, как она должна выглядеть, включая новые строки и любые необходимые отступы. Эта функция значительно улучшает читаемость и удобство поддержки кода, особенно при работе с большими строками или строками, которым необходимо сохранять форматирование, такими как запросы SQL или данные JSON.

String json = """{"name": "John Doe","age": 30,"city": "New York"}""";System.out.println(json);

Вывод программы:

{"name": "John Doe","age": 30,"city": "New York"}

2. Многострочные строки до Java 15

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

2.1.Конкатенация строк

До появления текстовых блоков, вероятно, наиболее распространенным подходом была простая конкатенация с помощью известного оператора «+».

String content = "Line 1" +NEW_LINE +"'Line 2'" +NEW_LINE +"\"Line 3\"" +NEW_LINE +"Line 4 ";System.out.println(content);

Обратите внимание, что современные компиляторы Java используют StringBuilder или StringBuffer под капотом, если несколько строк объединяются в цикле или в подобном сценарии. Поэтому внутренне компилятор может преобразовать это во что-то похожее на:

StringBuffer sb = new StringBuffer();String content = sb.append("Line 1").append(NEW_LINE).append("'Line 2'").append(NEW_LINE).append("\"Line 3\"").append(NEW_LINE).append("Line 4 ").toString();

2.2. Соединение строк

Начиная с JDK 8, мы можем использовать метод String.join() для представления многострочных строк. Лучшая часть метода join() заключается в том, что он принимает в качестве первого аргумента разделитель и использует этот разделитель между строками, которые будут объединены.

String content = String.join(NEW_LINE,"Line 1","'Line 2'","\"Line 3\"","Line 4 ");System.out.println(content);

Другой способ объединения строк, начиная с Java 8, — класс StringJoiner. StringJoiner поддерживает разделитель(как String.join()), но также поддерживает префикс и суффикс. Однако префикс/суффикс может не понадобиться в многострочных строках.

2.3 Потоки Java

Если у нас есть строки в коллекции, например List или Set, то имеет смысл использовать Stream API для объединения строк с помощью коллектора Collectors.joining(). Этот коллектор работает как String.join(), и в нашем случае это выглядит следующим образом:

String content = Stream.of("Line 1", "'Line 2'", "\"Line 3\"", "Line 4 ").collect(Collectors.joining(NEW_LINE));System.out.println(content);

3. Заключение

Решение о выборе способа создания многострочных строк во многом зависит от используемой версии Java. Если мы используем Java 15 или более позднюю версию, то нет причин не использовать текстовые блоки. До Java 15 предпочтительным методом была конкатенация строк, пока не появились StringJoiner и Stream API.

Исходный код на Github

Прокрутить вверх