如何解决Java文本块:缩进前缀中的制表符和空格的混合
Java 15 introduced(非预览版)文本块功能。 通过从行中删除 常见空白前缀 ,它可以定义多行字符串文字而不会破坏代码缩进。该算法在JEP 378中进行了描述。
但是,如果使用制表符和空格混合来缩进行,那么“公共空白前缀”的定义是如何呢?
例如,在以下情况下,字符串值是什么(<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
表示空格,·
表示制表符):
→ → ····String text = """ → → ····→ line1 → ········→ line2 → ····→ → """;
使用OpenJDK进行的简单测试显示结果字符串为:
line1 ··→ line2
因此,看来Javac只是对空格符号(包括空格和制表符)进行计数,并使用该计数-相等地对待空格(0x20)和制表符(0x09)。这是预期的行为吗?
旁注:这不是一个纯粹的理论问题;对于混合空格/制表符缩进和大型代码库的项目,它具有实际的重要性。
解决方法
我找到了想要分享的答案。
Java编译器确实确实平等地对待空格,制表符和所有其他whitespace characters 。
因此,从每一行中删除了(任意)空白字符相同的金额。
详细信息:
javac
tokenizer使用String.stripIndent()
method,它具有以下实现说明:
此方法将所有空白字符视为宽度相等。 只要每行的缩进始终由相同的字符序列组成 ,则结果将如上所述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。