微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。