问题标签 [java-text-blocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
13096 浏览

java - Java中的三引号,如Scala

在 Scala 中,您可以执行以下操作:

Java中有这样的东西吗?我讨厌用"\""引号来表示字符串。尤其是在 JSON 中组合键/值对时。恶心!

0 投票
1 回答
1083 浏览

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

我有这样的现有代码:

…在 IntelliJ 2020.1.1(预览版)终极版的项目中,其中 JDK 设置配置为语言级别14 (Preview) - Records, patters, text blocks

因此,当我单击出现在这行代码旁边的黄色灯泡时,我希望 IntelliJ 能够在显示的项目中提供文本块的转换。但我没有看到这样的提议。

通过单击此代码行旁边的黄色灯泡显示的弹出菜单的屏幕截图

我很惊讶没有找到这样的提议,因为 JetBrains 公司声称在其 IntelliJ 的 2020.1 版本中支持JEP 368: Text Blocks (Second Preview) ,如此处和此处所讨论

➥ IntelliJ 是否提供了一些将旧字符串连接转换为文本块的方法?

0 投票
1 回答
3796 浏览

java - 如何在java文本块中为变量值设置占位符

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

0 投票
3 回答
557 浏览

java - 在 Eclipse 4.15.0 中使用时插入 Java 14 文本块前导 \r\n

我正在学习如何处理 java 14(预览版)文本块。在 Junit 测试中使用以下文本块时,我遇到了以下意外功能(简化代码示例,在实际测试中我使用 HTML 片段):

执行此测试会导致错误,因为"\r\ntest"不匹配"test"

当我查阅文档(https://docs.oracle.com/javase/specs/jls/se14/preview/specs/text-blocks-jls.html)时,它字面意思是:

文本块的内容是紧接在开始定界符的行终止符之后开始并在结束定界符的第一个双引号之前结束的字符序列。

我错过了什么?
几个问题和建议后更新:
我创建了一个小测试类:

它在执行时打印以下内容:

这个类的字节码是

0 投票
1 回答
307 浏览

java - Java 文本块:缩进前缀中制表符和空格的混合

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

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

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

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

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


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

0 投票
1 回答
200 浏览

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

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

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

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

0 投票
1 回答
98 浏览

java - 文本块和 Println 格式,Java:如何删除多余的行

这是一个刽子手游戏,逻辑很好——单词填写正确,刽子手越来越被每个单词绞死。然而,“图形”对用户来说有点困难,你可以在下面的输出中看到:

怎样才能变平?下面的三个框显示了它是如何创建的相关代码。

上面的代码在有正确单词的时候填充了一个ArrayList,progressOnWord。progressOnWord 以“0000000000”开头,与单词中用于猜测的字符一样多的零。如果猜到了,它会用正确的字母填充,例如:

上面显示的当前阶段的“rh00o00ro0”。然后将其转换为 ASCII:如果 String 为 0,则将 ASCII 块空白添加到 ASCIIform,即 progressOnWord 的 ASCII 形式。例如,如果 progressOnWord 是 rh00o00ro0,那么 ASCII 块就是您在上面看到的。空白设置是不分青红皂白的——它不关心空白的位置,它只是将所有的 0 设置为空白。

这个声明是有区别的,它确保字母在正确的位置。

请注意,这两个代码块是连续的,但在这里分开以供评论。回到这个问题:为什么每个块都在一个新的行上,如何修复它?它从ArrayList<String>(浓缩如下)获取块:

ArrayList 的格式可能是问题吗?就像你有

在 ArrayList 中,它会打印以下内容吗?

我不这么认为。是因为添加了方块吗?正如他们所猜测的那样,它们被一个一个地添加,这会导致堆叠吗?或者是块本身中的某个字符 - 在字母 ArrayList 中的文本块中,它可能是\s?

要提供有关丹尼尔答案的更多详细信息,

StringBuilder.append(char c)并且ArrayList.set(int index, String element)正在使用。

这是代码:

上面,由于 0 是占位符,当遇到 0 时,将其替换为 ASCII Block Blank:

上面的代码在遍历单词中每个字符的循环中遍历一个字母表 。例如,对于“rhinoceros”:如果进度是 rh00o00ro0,它会检查 r 是否为 0。不。然后它继续遍历 a、b、c...z,直到找到 r。当它在字母表中找到 r 时,它注意到 r 在进程中位于点 0,并注意到 r 是字母表中的第 18 个字母,并继续将 ASCII 字中的点 0 设置为 ASCII 块字母表中的第 18 个字符串:

必须使用该ArrayList.set(int index, String element)方法,因为角色位置在此游戏中很重要。

相比之下,StringBuilder.append(char c)在创建 ASCII 转换的演示时使用;如果用户输入“rhinoceros”,它会以您在上面看到的 ASCII 块样式打印完整的单词“rhinoceros”,以便让用户体验“图形”样式。这是代码:

值得注意的是StringBuilder.append()ArrayList.set()产生相同的结果:堆叠。有没有办法append()set()“侧身”?和方法默认堆叠字母append()set()似乎它必须与 ArrayList 中的文本块格式有关。虽然水平通常是默认设置,但这种随意的附加/设置是否可以在水平方向强制执行,以导致 R---->H---->I---->N...?

0 投票
1 回答
3927 浏览

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

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

0 投票
2 回答
249 浏览

java - 单行文本块

是否可以使用Java文本块功能(Java 15)但只写一行

看来我被迫写多行。


例如,我想把它写在一行中,以避免在其中"转义

但它不能编译,我必须写

反而。

我忽略了什么吗?

0 投票
1 回答
63 浏览

java - 为什么 Java 15 的文本块功能中包含 translateEscapes 和 stripIndent String 方法?

在 Java 15 中,JEP 378: Text Blocks将三个实例方法添加到String: stripIndent()translateEscapes()formatted(Object... args):

将添加以下方法以支持文本块;

  • String::stripIndent():用于从文本块内容中去除偶然的空白
  • String::translateEscapes(): 用于翻译转义序列
  • String::formatted(Object... args): 简化文本块中的值替换

JEP 中解释了使用文本块时的用处formatted,所以它的存在对我来说很有意义。

然而,其他两种方法对于使用文本块的开发人员来说似乎并不是特别有用。缩进剥离和转义翻译都是编译器针对文本块自动处理的事情。代码编写者永远不需要以编程方式从 Java 文本块中去除缩进,也不需要翻译文本块中的转义。此外,转义翻译自 Java 编译器最初发布以来一直存在,因此除了添加两个新的转义序列以支持文本块(\s\<line-terminator>)之外,它甚至不是 Java 的新功能。

JEP 解释说这些方法可供开发人员访问,但不是做出此决定的原因。

重新缩进算法将在The Java Language Specification中成为规范。String::stripIndent开发人员将可以通过一个新的实例方法来访问它。

String::translateEscapes开发人员将可以通过一个新的实例方法访问转义处理。

为什么这些方法String与 Java 15 中的文本块一起添加到公共 API 中,而它们对于在编译器之外操作文本块(或以其他方式读取 Java 源代码的代码)没有用处?

我没有在 JEP 中看到它的解释,所以我想知道是否有任何官方文字或讨论来解释将这些方法包含在公共 API 中。