标签: java-text-blocks

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

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

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

java java-14 java-text-blocks

7
推荐指数
1
解决办法
2194
查看次数

在 Java 中将 JSON 数据硬编码为字符串的更好方法

我需要将 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 string json multilinestring java-text-blocks

6
推荐指数
1
解决办法
5061
查看次数

Java 文本块:在缩进前缀中混合使用制表符和空格

Java 15引入了(非预览)文本块功能。它允许通过从行中剥离公共空白前缀来定义多行字符串文字而不会破坏代码缩进JEP 378 中描述了该算法。

但是,在使用制表符和空格混合缩进的情况下,“公共空白前缀”究竟是如何定义的?

例如,以下情况下的字符串值是什么(·表示空格,? 表示制表符):

? ? ····字符串文本 = """
? ? ····?第一行
? ··········?线2
? ····?? """;

使用 OpenJDK 进行的简单测试显示结果字符串为:

第一行
··?线2

所以看起来 Javac 只是计算空白符号,包括空格和制表符,并使用计数——平等对待空格 (0x20) 和制表符 (0x09)。这是预期的行为吗?


旁注:这不是一个纯粹的理论问题;它对于具有混合空格/制表符缩进和大型代码库的项目具有实际重要性。

java string java-text-blocks java-15

5
推荐指数
1
解决办法
191
查看次数

Java text block indentation and leading spaces

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)

java java-text-blocks

5
推荐指数
1
解决办法
1382
查看次数

IntelliJ 可以将我的旧字符串连接转换为 Java 14 中预览的新文本块功能吗?

我有这样的现有代码:

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 是否提供某种方法将旧的字符串连接转换为文本块?

java intellij-idea java-text-blocks

4
推荐指数
1
解决办法
523
查看次数

单行文本块

是否可以使用 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 java-text-blocks

4
推荐指数
2
解决办法
100
查看次数

IntelliJ 能否将 Java 文本块视为 SQL 或 XML 等语法来协助编辑/格式化?

Java 15为我们带来了新的JEP 378:文本块功能。这简化了多行字符串的处理。

可以让IntelliJ将该块中的文本解析为某种语法吗?我有办法告诉 IntelliJ 文本块是SQL源代码还是XML数据吗?

如果是这样,IntelliJ 是否可以使用其代码编辑超能力来帮助通过该文本块对嵌套在 Java 中的代码进行着色、编辑和格式化?

java formatting intellij-idea embedded-language java-text-blocks

3
推荐指数
1
解决办法
1230
查看次数

Java 中的文本块(或多行字符串)功能是什么?

Java SE 13 引入了文本块(或多行字符串)功能。它与现有的字符串表示有什么区别和相似之处?

java java-text-blocks java-15

-4
推荐指数
1
解决办法
3079
查看次数