Перейти к содержанию

Многострочные строки в Java

В этом руководстве узнаем, как объявлять многострочные строки в Java.

После того, как вышла Java 15, можно использовать новую встроенную функцию под названием «Текстовые блоки» (Text Blocks).

Рассмотрим и другие способы, если не можем использовать эту функцию.

Текстовые блоки

Можно использовать текстовые блоки, объявив строку с помощью “”” (три двойных кавычки):

public String textBlocks() {
    return """
        Займитесь жизнью
        или
        займитесь смертью.
        --Стивен Кинг""";
}

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

Эта функция доступна в Java 15, а также в Java 13 и 14, если включим функцию предварительного просмотра.

В следующих разделах рассмотрим другие способы, которые подходят, если используем предыдущую версию Java или если текстовые блоки неприменимы.

Получение разделителя строк

Каждая операционная система может иметь собственный способ определения и распознавания новых строк.

В Java очень легко получить разделитель строк операционной системы:

String newLine = System.getProperty("line.separator");

Мы собираемся использовать newLine в следующих разделах для создания многострочных строк.

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

Конкатенация строк – это простой способ, который можно использовать для создания многострочных строк:

public String stringConcatenation() {
    return "Займитесь жизнью"
            .concat(newLine)
            .concat("или")
            .concat(newLine)
            .concat("займитесь смертью.")
            .concat(newLine)
            .concat("--Стивен Кинг");
}

Использование оператора + – еще один способ добиться того же. Компиляторы Java переводят concat() и оператор + одинаково:

public String stringConcatenation() {
    return "Займитесь жизнью"
            + newLine
            + "или"
            + newLine
            + "займитесь смертью."
            + newLine
            + "--Стивен Кинг";
}

String Join

Java 8 представила String#join, который принимает разделитель вместе с некоторыми строками в качестве аргументов.

Он возвращает окончательную строку, в которой все входные строки объединены разделителем:

public String stringJoin() {
    return String.join(newLine,
                       "Займитесь жизнью",
                       "или",
                       "займитесь смертью.",
                       "--Стивен Кинг");
}

String Builder

StringBuilder – это вспомогательный класс для построения строк. StringBuilder появился в Java 1.5 как замена StringBuffer.

Это хороший выбор для построения огромных строк в цикле:

public String stringBuilder() {
    return new StringBuilder()
            .append("Займитесь жизнью")
            .append(newLine)
            .append("или")
            .append(newLine)
            .append("займитесь смертью.")
            .append(newLine)
            .append("--Стивен Кинг")
            .toString();
}

String Writer

StringWriter – это еще один способ, который можно использовать для создания многострочной строки. Здесь не нужна новая строка, потому что мы используем PrintWriter.

Функция println автоматически добавляет новые строки:

public String stringWriter() {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    printWriter.println("Займитесь жизнью");
    printWriter.println("or");
    printWriter.println("займитесь смертью.");
    printWriter.println("--Стивен Кинг");
    return stringWriter.toString();
}

Guava Joiner

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

Например, очень популярна библиотека Google Guava.

В Guava есть класс Joiner, который может создавать многострочные строки:

public String guavaJoiner() {
    return Joiner.on(newLine).join(ImmutableList.of("Займитесь жизнью",
        "или",
        "займитесь смертью.",
        "--Стивен Кинг"));
}

Загрузка из файла

Java читает файлы такими, какие они есть. Это означает, что, если есть многострочная строка в текстовом файле, то будет такая же строка при чтении файла. В Java существует множество способов чтения из файла.

На самом деле хорошей практикой является отделение длинных строк от кода:

public String loadFromFile() throws IOException {
    return new String(Files.readAllBytes(Paths.get("src/main/resources/stephenking.txt")));
}

Использование функций IDE

Многие современные IDE поддерживают многострочное копирование/вставку. Примерами таких IDE являются Eclipse и IntelliJ IDEA. Можно просто скопировать многострочную строку и вставить ее в две двойные кавычки в этих IDE.

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

Заключение

В этой статье мы узнали о нескольких способах построения многострочных строк в Java.

Хорошей новостью является то, что Java 15 имеет встроенную поддержку многострочных строк через текстовые блоки.

Все остальные рассмотренные способы можно использовать в Java 15 или любой предыдущей версии.

Код всех способов в этой статье доступен на GitHub.

Оригинал