【问题标题】:How to have placeholder for variable value in java text block如何在java文本块中为变量值设置占位符
【发布时间】:2020-04-25 20:43:31
【问题描述】:

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

"""
{
  ...
  "someKey": "someValue",
  "date": "${LocalDate.now()}",
  ...
}
"""

【问题讨论】:

  • 它毕竟是String 的代表。至少现在没有关于“为什么不尝试使用像String.format 这样的现有结构”的进一步细节,这个问题将完全重复。剩下的留给社区来决定。
  • 这能回答你的问题吗Java - Including variables within strings?
  • 我想了更多关于如何在文本块中编写 java 代码,String.format 更像是一种解决方法,遗憾的是我没有想到......
  • @DennisGlot String::format 不是workaround,它是Java 中进行字符串插值的常规方法。 (对于文本块,还添加了一个实例版本,所以如果你喜欢链接,可以说"...".formatted(...)。)

标签: java java-14 java-text-blocks


【解决方案1】:

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

String str = """
{
...
"someKey": "someValue",
"date": %s,
...
}
"""

并使用format替换它

String.format(str,LocalDate.now());

来自jeps 355 docs

更简洁的替代方法是使用 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);

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

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

注意:但作为附注java-13 docs String.formatted​ 已弃用,建议使用String.format(this, args).

此方法与文本块相关联,这是一种预览语言功能。未来版本中可能会更改或删除文本块和/或此方法。

附: Java 文本块和 formatted(Object... args) 方法自 Java 版本 15 起成为 Java 语言的一部分。

【讨论】:

  • 你能解释一下,为什么这不是stackoverflow.com/questions/9643610/…的重复?
  • @Naman 因为这个问题是关于传统字符串语法的,而这个问题是专门关于文本块的。
  • @BasilBourque JEP-355 读取 - “为任何新构造表示的字符串定义不同于 java.lang.String 的新引用类型不是目标。” 或者反过来读,"文本块是一个 多行字符串 文字,它避免了大多数转义序列的需要,自动以可预测的方式格式化字符串,并在需要时让开发人员控制格式。(由我格式化)。无论如何,让社区进一步决定思想冲突会增加对 JEP 缺乏兴趣。
  • String.formatted 并未“真正”弃用。实际上,它是一种新方法(从 Java 13 开始)。仅因为它与作为预览功能的文本块相关而被弃用。但是如果你使用文本块,你也可以使用这种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多