Java 21 字串模板 String Templates

隨著程式語言的發展,幾乎所有語言都有字串模板的功能了,例如 JavaScript:
    
let id = 1;
let name = "小明";

console.log(`id: ${id}, name: ${name}`); // id: 1, name: 小明
    

C#:
    
int id = 1;
string name = "小明";

Console.WriteLine($"id:{id}, name:{name}"); // id:1, name:小明
    

Java 21 在 2023 年 9 月 19 日發布, 不知道等了多少年,終於輪到 Java 了有字串模板(String Templates)了!不過此功能目前還是在預覽版...

幾種以前的方式和新的字串模板的方式比較:
    
int id = 1;
String name = "小明";

System.out.println("id: " + id + ", name: " + name);
System.out.println(new StringBuilder().append("id: ").append(id).append(", name: ").append(name));
System.out.println(String.format("id: %d, name: %s", id, name));
System.out.printf("id: %d, name: %s%n", id, name);

System.out.println(STR."id: \{id}, name: \{name}");

// id: 1, name: 小明
    

字串模板前面的 STR 的命名空間:
    
import static java.lang.StringTemplate.STR;
    

還記得在 Java 13 中加入的文字區塊(Text Blocks)功能嗎?就是能夠方便輸入多行字串(multiline strings)的那個:
    
String str = """
        {
            "id": 1,
            "name": "小明"
        }
        """;

System.out.println(str);

/*
{
    "id": 1,
    "name": "小明"
}
*/
    

也可以和字串模板搭配使用:
    
String str = STR."""
        {
            "id": \{id},
            "name": "\{name}"
        }
        """;


System.out.println(str);

/*
{
    "id": 1,
    "name": "小明"
}
*/
    

超級方便!

參考資料:
OpenJDK - JEP 430: String Templates (Preview)
Oracle.docs - Interface StringTemplate
Java Magazine - Java 21 is here: Virtual threads, string templates, and more
Java Magazine - Text Blocks Come to Java

留言