Рубрики
Без рубрики

Многострочная строка Java, текстовые блоки

В этой статье показано, как объявить многострочную строку в Java, включая новые текстовые блоки Java 8 и Java 14 “””.

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

  1. Строка + Строка + Строка
  2. Строитель строк
  3. Строитель строк
  4. Строковый писатель
  5. Строка.присоединиться ( Java 8)
  6. Java 8) ( Java 8)
  7. (""") Текстовые блоки Java 13 и Java 14 (функция предварительного просмотра)

Просмотрите HTML и строку JSON, и мы будем использовать описанные выше методы для объявления следующей многострочной строки в Java.


    
        

Hello, World

{ "name":"mkyong", "age":38 }

1. Строка + Строка + Строка

Самое простое решение – добавить многострочную строку с + .

    String html = "\n"
                + "     \n"
                + "         

Hello, World

\n" + " \n" + ""; String json = "{\n" + " \"name\":\"mkyong\",\n" + " \"age\":38\n" + "}";

2. Строитель строк

Этот метод является широко используемым шаблоном.

    String html = new StringBuilder()
            .append("\n")
            .append("     \n")
            .append("         

Hello, World

\n") .append(" \n") .append("") .toString(); String json = new StringBuilder() .append("{\n") .append(" \"name\":\"mkyong\",\n") .append(" \"age\":38\n") .append("}").toString();

3. Формат строки

Это работает, но не рекомендуется, слишком сложно подсчитать количество %s .

    String html = String.format("%s\n%s\n%s\n%s\n%s"
            , ""
            , "     "
            , "         

Hello, World

" , " " , ""); String json = String.format("%s\n%s\n%s\n%s" , "{" , " \"name\":\"mkyong\"," , " \"age\":38" , "}");

4. Строковый писатель

Немного странно, но это работает.

    // no need close this
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    pw.println("");
    pw.println("     ");
    pw.println("         

Hello, World

"); pw.println(" "); pw.println(""); String html = sw.toString(); StringWriter sw2 = new StringWriter(); PrintWriter pw2 = new PrintWriter(sw2); pw2.println("{"); pw2.println(" \"name\":\"mkyong\","); pw2.println(" \"age\":38"); pw2.println("}"); String json = sw2.toString();

5. Строка Java 8.присоединяйтесь

Java 8, соединяет многострочную строку с новой строкой.

    String html = String.join("\n"
                , ""
                , "     "
                , "         

Hello, World

" , " " , ""); String json = String.join("\n" , "{" , " \"name\":\"mkyong\"," , " \"age\":38" , "}");

6. Java 8, соединяет многострочную строку с новой строкой.

Обычно в файл помещается многострочная строка. В этом примере используется Files.lines чтобы загрузить файл из папки ресурсов пути к классу и преобразовать его в Поток<Строка> для обработки.


    
        

Hello, World

package com.mkyong.java13.jep355;

import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MultiLineString6 {

    public static void main(String[] args) throws IOException, URISyntaxException {

        Stream lines = Files.lines(
                Paths.get(ClassLoader.getSystemResource("test.html").toURI())
        );

        System.out.println(lines.collect(Collectors.joining("\n")));

    }
}

Выход


    
        

Hello, World

7. Текстовые блоки (предварительный просмотр в Java 13, 14)

7.1 Теперь мы можем использовать три символа двойных кавычек (""") для объявления многострочной строки в Java. Этот текстовый блок является рекомендуемым решением, простым и красивым, надеюсь, что он скоро станет стандартной функцией.

P.S Этот текстовые блоки это функция предварительного просмотра в Java 13 и Java 14, она может снова измениться в будущем выпуске.

    String html =   """
                    
                        
                            

Hello, World

"""; String json = """ { "name":"mkyong", "age":38 } """;

Этот текст блокирует:

"""
line 1
line 2
line 3
"""

эквивалентно этому:

"line 1\nline 2\nline 3\n"

7.2 Этот текстовый блок поддерживает escape-последовательности.

    String html = """
                  
                  \t
                  \t\t

Hello, World

\t """;

7.3 Символы кавычек (") могут использоваться внутри текстового блока; см. Эту многострочную строку в формате JSON.

    String json =   """
                    {
                        "name":"mkyong",
                        "age":38
                    }
                    """;

7.4 Объединение текстовых блоков, ниже приведен допустимый синтаксис.

  String html = "\n" +
                """
                    
                        

Hello, World

"""+ "";

7.5 В Java 13 добавлены три метода для поддержки текстовых блоков.

  • Строка::отступ полосы() : Удалите случайные пробелы из содержимого текстового блока.
  • Строка::перевести Escapes() :Перевести escape-последовательности.
  • Строка::форматированный (Объект... аргументы) : Для подстановки значений в текстовом блоке.

Строка ::отформатирована пример подстановки значений в текстовом блоке.

  String json =   """
                  {
                      "name":"%s",
                      "age":%d,
                      "address":"%s"
                  }
                  """;
  System.out.println(json.formatted("mkyong", 38, "abc"));

Мы можем получить тот же результат со стандартным String::заменить или String.формат вот так:

  // String.format
  String json = """
                {
                    "name":"%s",
                    "age":%d,
                    "address":"%s"
                }
                """;

  System.out.println(String.format(json, "mkyong", 38, "abc"));

  // String::replace
  String json2 =   """
                  {
                      "name":"$name",
                      "age":$age,
                      "address":"$address"
                  }
                  """;

  System.out.println(json2
          .replace("$name", "mkyong")
          .replace("$age", "38")
          .replace("$address", "abc"));

Нужен ли нам новый API Строка::форматированный(объект... аргументы) для замещения стоимости?

7.6 В Java 14 добавлены два метода для поддержки текстовых блоков.

  • \<конец строки> подавляет завершение строки.
  • \s переводится в один пробел.
  String html = """
                
                    \
                        

Hello, '\s' World

\ """;

Выход


            

Hello, ' ' World

7.7 Java 15 (еще не выпущена), продолжение следует.

Скачать Исходный Код

$клон git $клон git

$cd java-13 $cd java-14

Рекомендации

Оригинал: “https://mkyong.com/java/java-multi-line-string-text-blocks/”