如何在java文本块中为变量值添加占位符

Den*_*lot 7 java java-14 java-text-blocks

如何将变量放入java文本块中?
喜欢

"""
{
  ...
  "someKey": "someValue",
  "date": "${LocalDate.now()}",
  ...
}
"""
Run Code Online (Sandbox Code Playgroud)

Dea*_*ool 10

您可以%s在文本块中用作占位符

String str = """
{
...
"someKey": "someValue",
"date": %s,
...
}
"""
Run Code Online (Sandbox Code Playgroud)

并使用格式替换它

String.format(str,LocalDate.now());
Run Code Online (Sandbox Code Playgroud)

来自jeps 355 文档

更简洁的替代方法是使用 String::replace 或 String::format,如下所示:

String code = """
          public void print($type o) {
              System.out.println(Objects.toString(o));
          }
          """.replace("$type", type);

String code = String.format("""
          public void print(%s o) {
              System.out.println(Objects.toString(o));
          }
          """, type);
Run Code Online (Sandbox Code Playgroud)

另一种选择涉及引入新的实例方法 String::formatted,可以按如下方式使用:

String source = """
            public void print(%s object) {
                System.out.println(Objects.toString(object));
            }
            """.formatted(type);
Run Code Online (Sandbox Code Playgroud)

注意:但作为java-13文档的旁注,String.formatted?已弃用并建议使用String.format(this, args)。

此方法与文本块(预览语言功能)相关联。文本块和/或此方法可能会在未来版本中更改或删除。

  • `String.formatted` 并没有“真正”被弃用。事实上,它是一个新方法(自 Java 13 以来)。它已被弃用,只是因为它与文本块相关,而文本块是预览功能。但如果你使用文本块,你也可以使用这种方法。 (4认同)
  • https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#formatted(java.lang.Object...) 使用它是安全的现在 (4认同)
  • @Naman因为这个问题是关于传统的字符串语法,而这个问题是专门关于文本块的。 (3认同)