Java 15引入了(非预览版)文本块功能。它允许通过从行中去除公共空白前缀来定义多行字符串文字而不破坏代码缩进。JEP 378中描述了该算法。
但是,在使用制表符和空格混合缩进的情况下,“通用空白前缀”究竟是如何定义的?
例如,以下情况下的字符串值是什么(·
表示空格,→
表示制表符):
→ → ····字符串文本 = """ → → ····→ 1号线 →········→ line2 →····→→“””;
使用 OpenJDK 进行的简单测试显示结果字符串为:
第1行 ··→线2
所以看起来 Javac 只计算空白符号,包括空格和制表符,并使用计数——平等地对待空格 (0x20) 和制表符 (0x09)。这是预期的行为吗?
旁注:这不是一个纯粹的理论问题;它对于具有混合空格/制表符缩进和大型代码库的项目具有实际重要性。