Java Academy · Урок

Текстовые блоки и String.format

Создавайте многострочные строки с помощью текстовых блоков и форматируйте данные шаблонами String.format.

Урок 3 из 413 шагов

«Текстовые блоки и String.format» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Текстовые блоки и String.format

Текстовые блоки (Java 15+) позволяют использовать многострочные строковые литералы без экранирования. В сочетании с String.format и formatted() они делают сложный вывод строк чистым и понятным.

Что такое текстовые блоки

Текстовый блок — это строковый литерал, заключённый в тройные двойные кавычки """. Он автоматически сохраняет переводы строк и отступы, устраняя необходимость в управляющих последовательностях для многострочного содержимого.

// Traditional multi-line string
String old = "SELECT id, name, email\n" +
             "FROM users\n" +
             "WHERE active = true\n" +
             "ORDER BY name;";

// Text block (Java 15+) — much cleaner
String sql = """
    SELECT id, name, email
    FROM users
    WHERE active = true
    ORDER BY name;
    """;

System.out.println(sql);

Обработка отступов

Текстовые блоки автоматически удаляют общие начальные пробелы. Положение закрывающих """ управляет отступами.

// Leading spaces up to the closing """ are stripped
String json = """
        {
            "name": "Alice",
            "role": "admin"
        }
        """;
// Output has no leading spaces (stripped by common indent)
System.out.println(json);
// {
//     "name": "Alice",
//     "role": "admin"
// }

Встроенные кавычки

В текстовых блоках можно использовать двойные кавычки без экранирования, если только не встречаются три кавычки подряд. Одиночная " и двойная "" кавычки допустимы.

String html = """
    <div class="container">
        <p class="title">Hello, World!</p>
        <a href="https://example.com">Click here</a>
    </div>
    """;
System.out.println(html);
// Note: no need to escape " inside the block

Текстовые блоки для шаблонов JSON

Текстовые блоки особенно удобны для шаблонов JSON, HTML, XML и SQL, используемых в тестах или конфигурации.

String request = """
    {
        "email": "alice@example.com",
        "password": "secret123",
        "plan": "PRO"
    }
    """;

// In tests: compare expected JSON
String expected = """
    {
      "status": "created",
      "id": 42
    }
    """;
// Perfect for MockMvc test assertions
System.out.println(request);

formatted() с текстовыми блоками

Объединяйте текстовые блоки с formatted() (Java 15+), чтобы создавать шаблоны с параметрами.

String name = "Alice";
long orderId = 1234L;
double total = 149.99;

String email = """
    Dear %s,

    Your order #%d has been confirmed.
    Total charged: $%.2f

    Thank you for shopping with us!
    """.formatted(name, orderId, total);

System.out.println(email);
// Dear Alice,
// Your order #1234 has been confirmed.
// Total charged: $149.99

Управляющие последовательности в текстовых блоках

Текстовые блоки поддерживают \n, \t, а также \ из Java 14+ (продолжение строки) и \s (сохранение конечных пробелов).

// \s forces a space (preserves trailing whitespace on line)
String padded = """
    line one  \s
    line two   \s
    """;

// \ (backslash at end of line) joins lines in source but keeps them as one
String poem = """
    Roses are red, \
    violets are blue.
    """;
System.out.println(poem); // Roses are red, violets are blue.

Справочник String.format

Основные спецификаторы формата для String.format:

  • %s — String
  • %d — целое число
  • %f — число с плавающей точкой
  • %.2f — 2 знака после запятой
  • %n — перевод строки платформы
  • %x — шестнадцатеричное число
  • %10d — выравнивание по правому краю в поле шириной 10 символов
System.out.printf("%s | %d | %.2f | %X%n", "Item", 42, 9.99, 255);
// Item | 42 | 9.99 | FF

String formatted = String.format("%-20s %6.2f%n", "Mechanical Keyboard", 129.95);
System.out.print(formatted);
// Mechanical Keyboard 129.95

// Named format with text block
System.out.printf("""
    Order: %s
    Total: $%.2f
    Status: %s%n""", "ORD-001", 99.99, "SHIPPED");

stripIndent и translateEscapes для текстовых блоков

С текстовыми блоками работают два метода String: stripIndent() удаляет общие начальные пробелы, а translateEscapes() обрабатывает управляющие последовательности в строке во время выполнения.

String raw = "  hello\\n  world";
System.out.println(raw);                    // hello\n  world
System.out.println(raw.translateEscapes()); // hello (newline) world

// stripIndent removes common leading whitespace
String indented = "    line 1\n    line 2\n    line 3";
System.out.println(indented.stripIndent()); // line 1\nline 2\nline 3

Практический пример: шаблон HTML-письма

Создание шаблона HTML-письма с параметрами с помощью текстового блока.

static String buildWelcomeEmail(String name, String activationLink) {
    return """
        <!DOCTYPE html>
        <html>
          <body>
            <h1>Welcome, %s!</h1>
            <p>Click the link below to activate your account:</p>
            <a href="%s">Activate Account</a>
          </body>
        </html>
        """.formatted(name, activationLink);
}

System.out.println(buildWelcomeEmail("Alice",
    "https://app.example.com/activate?token=abc123"));

Текстовые блоки и String.join

Для списков элементов String.join или Collectors.joining гибче, чем текстовый блок. Используйте текстовые блоки для фиксированного многострочного содержимого, а join — для динамических списков.

import java.util.*;
import java.util.stream.*;

List<String> features = List.of("Unlimited storage", "Priority support", "AI assistant");

// Dynamic list: join
String bullet = features.stream()
    .map(f -> "  • " + f)
    .collect(Collectors.joining("\n"));
System.out.println(bullet);
// • Unlimited storage
// • Priority support
// • AI assistant

// Fixed template: text block + formatted
String plan = """
    PRO Plan — $29/month
    Features:
    %s
    """.formatted(bullet);
System.out.println(plan);

Быстрая проверка

Положение закрывающих """ управляет чем в текстовом блоке?

Итоги: текстовые блоки и String.format

Главные выводы:

  • Текстовые блоки (Java 15+) используют тройные кавычки и сохраняют многострочную структуру без экранирования
  • Общие начальные пробелы удаляются автоматически в зависимости от положения закрывающих \"\"\"
  • Двойные кавычки внутри текстовых блоков не требуют экранирования
  • Используйте .formatted() для текстового блока, чтобы создавать шаблоны с параметрами
  • Спецификаторы String.format: %s, %d, %.2f, %n, %x, флаги ширины и выравнивания
  • Используйте \s в конце строки, чтобы сохранить конечные пробелы; \ в конце строки — чтобы объединить строки
Можно начать бесплатно

Изучай Java с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
104
Уроки
374

Часто задаваемые вопросы

Урок «Текстовые блоки и String.format» бесплатный?

Да — полный текст урока «Текстовые блоки и String.format» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Текстовые блоки и String.format»?

Создавайте многострочные строки с помощью текстовых блоков и форматируйте данные шаблонами String.format. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Текстовые блоки и String.format»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Неизменяемость String и пул строк
  2. StringBuilder для эффективного объединения
  3. Текстовые блоки и String.format
  4. Регулярные выражения с Pattern и Matcher
← Назад к Java Academy