如何将变量放入java文本块中?
喜欢
"""
{
...
"someKey": "someValue",
"date": "${LocalDate.now()}",
...
}
"""
Run Code Online (Sandbox Code Playgroud) 我需要将 JSON 数据作为字符串保存在代码中以进行单元测试。例如,
{
"one": 1,
"two": 2
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以从文件或属性中读取这些数据,但我需要将它们保留为字符串。目前,我有这样的事情:
String s = "{\n" +
" \"one\": 1,\n" +
" \"two\": 2\n" +
"}";
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看,而且在更复杂的数据中,很难读取和修改它。
我可能会摆脱它们\n,因为它们并不是真正需要的,而是为了稍后更好地查看这些数据:
String s = "{" +
" \"one\": 1," +
" \"two\": 2" +
"}";
Run Code Online (Sandbox Code Playgroud)
另外,我可以使用引号替换的技巧:
String s = ("{\n" +
" 'one': 1,\n" +
" 'two': 2\n" +
"}").replace('\'','"');
Run Code Online (Sandbox Code Playgroud)
或者同时将两者结合起来。
有没有更好的方法在 Java 中将 JSON 数据表示为 a String?
例如,在Python中,有三引号:
s = """
{
"one": 1,
"two": 2
}
"""
Run Code Online (Sandbox Code Playgroud) Java 15引入了(非预览)文本块功能。它允许通过从行中剥离公共空白前缀来定义多行字符串文字而不会破坏代码缩进。JEP 378 中描述了该算法。
但是,在使用制表符和空格混合缩进的情况下,“公共空白前缀”究竟是如何定义的?
例如,以下情况下的字符串值是什么(·表示空格,? 表示制表符):
? ? ····字符串文本 = """ ? ? ····?第一行 ? ··········?线2 ? ····?? """;
使用 OpenJDK 进行的简单测试显示结果字符串为:
第一行 ··?线2
所以看起来 Javac 只是计算空白符号,包括空格和制表符,并使用计数——平等对待空格 (0x20) 和制表符 (0x09)。这是预期的行为吗?
旁注:这不是一个纯粹的理论问题;它对于具有混合空格/制表符缩进和大型代码库的项目具有实际重要性。
Given the following code
public class TextBlock {
public static void main(String[] args) {
String indentedText = """
hello
indented
world
""";
System.out.println(indentedText);
}
}
Run Code Online (Sandbox Code Playgroud)
The output is as follows (mind the leading spaces):
hello
indented
world
Run Code Online (Sandbox Code Playgroud)
How to obtain String value like below (without unnecessary leading spaces)?
hello
indented
world
Run Code Online (Sandbox Code Playgroud) 我有这样的现有代码:
String sql = "CREATE TABLE " + tableName + " (\n" +
" id_ UUID DEFAULT random_uuid() PRIMARY KEY ,\n" +
" when_ TIMESTAMP WITHOUT TIME ZONE NOT NULL\n" +
" duration_ STRING NOT NULL\n" +
");";
Run Code Online (Sandbox Code Playgroud)
...在 IntelliJ 2020.1.1(预览版)旗舰版的一个项目中,其中 JDK 设置是针对语言级别配置的14 (Preview) - Records, patters, text blocks。
因此,我希望 IntelliJ 在我单击此行代码旁边出现的黄色灯泡时,在项目显示中提供对文本块的转换。但我看不到这样的提议。
我很惊讶没有找到这样的报价,因为 JetBrains 公司声称在其 2020.1 版 IntelliJ 中支持JEP 368:文本块(第二预览),如此处和此处所述。
? IntelliJ 是否提供某种方法将旧的字符串连接转换为文本块?
是否可以使用 Javas文本块功能(Java 15)但只写一行?
看来我是被迫写多行了。
例如,我想在一行写是为了避免逃避"它
String text = """<a href="https://sparkjava.com">https://sparkjava.com/</a>""";
Run Code Online (Sandbox Code Playgroud)
但它不能编译,我必须写
String text = """
<a href="https://sparkjava.com">https://sparkjava.com/</a>""";
Run Code Online (Sandbox Code Playgroud)
反而。
我是否忽略了什么?
Java 15为我们带来了新的JEP 378:文本块功能。这简化了多行字符串的处理。
可以让IntelliJ将该块中的文本解析为某种语法吗?我有办法告诉 IntelliJ 文本块是SQL源代码还是XML数据吗?
如果是这样,IntelliJ 是否可以使用其代码编辑超能力来帮助通过该文本块对嵌套在 Java 中的代码进行着色、编辑和格式化?
java formatting intellij-idea embedded-language java-text-blocks
Java SE 13 引入了文本块(或多行字符串)功能。它与现有的字符串表示有什么区别和相似之处?