[TIL/0721] Java text block

fpg1·2023년 7월 20일

TIL

목록 보기
7/12

Java text blocks

생성

  • text block으로 생성되는 객체는 java.lang.String이다
// Error
String name = """red green blue""";

// Error
String name = """red
                 green
                 blue
                 """;

// Ok
String name = """
      red
      green
      blue""";

// Ok
String name = """
      red
      green
      red
      """;
  • 큰따옴표를 이스케이프 처리할 필요가 없다
String name = """
      String message = "Hello, world!";
      System.out.println(message);
      """;

공백

  • text block은 부수적인 공백(incidental white space)와 필수공백(essential space)를 구분한다
    부수적인 공백 알고리즘은 JEP378에 자세히 설명되어있다
    가장 적은 공백줄을 기준으로 공백을 제거한다
void writeHTML() {
    String html = """
········<html>
········    <body>
········        <p>Hello World.</p>
········    </body>
········</html>
········""";
}
  • 마지막 줄의 닫는 큰따옴표를 활용한 공백조절
void writeHTML() {
    String html = """
········    <html>
········        <body>
········            <p>Hello World.</p>
········        </body>
········    </html>
········""";
}
  • indent 메서드 활용한 공백조절
String colors = """
    red
    green
    blue""".indent(4);

후행공백(Trailing white space)

  • text block에서 후행공백은 모두 제거된다.
  • 후행공백을 활용하기 위한 세가지 전략은 다음과 같다
// character substitution
String r = """
    trailing$$$
    white space
    """.replace('$', ' ');


// character fence
String s = """
    trailing   |
    white space|
    """.replace("|\n", "\n");


// octal escape sequence for space
String t = """
    trailing\040\040\040
    white space
    """;

style guide

  • 단일 줄이라면 text block보다는 큰따옴표 2개를 활용한 문자열리터열이 낫다
  • 여는 기호, 닫는 기호와 텍스트들이 왼쪽 여백을 맞추지마라.
    변수 이름이나 지정자가 추가되면 텍스트 블록을 다시 들여써야한다
// ORIGINAL
String string = """
                red
                green
                blue
                """;

// ORIGINAL - after variable declaration changes
static String rgbNames = """
                         red
                         green
                         blue
                         """;

// BETTER
String string = """
    red
    green
    blue
    """;

// BETTER - after variable declaration changes
static String rgbNames = """
    red
    green
    blue
    """;
  • 닫는 기호를 개행하고 줄바꿈을 에스케이프로 개행방지 하는 것이 가독성에 낫다
// ORIGINAL

String name = """
    red
    green
    blue""";


// BETTER

String name = """
        red
        green
        blue\
    """;
  • String formatted(Object ... args)
String output = """
    Name: %s
    Phone: %s
    Address: %s
    Salary: $%.2f
    """.formatted(name, phone, address, salary);
  • String stripIndent(): text block과 동일한 알고리즘으로 여백제거
profile
backend

0개의 댓글