当前位置: 首页 > 知识库问答 >
问题:

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

斜俊
2023-03-14

Java15引入了(非预览)文本块功能。它允许在不破坏代码缩进的情况下定义多行字符串文字,方法是从行中去掉公共空白前缀。JEP 378中描述了该算法。

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

例如,在下列情况下(·表示空格,表示制表符):


→   →   ····String text = """
→   →   ····→   line1
→   ········→   line2
→   ····→   →   """;

用OpenJDK进行的一个简单测试表明,结果字符串是:


line1
··→   line2

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

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


共有1个答案

路欣荣
2023-03-14

我已经找到了我想分享的答案。

Java编译器确实平等对待空格、制表符和所有其他空格字符。

因此,从每一行中删除相同数量的(任何)空白字符。

细节:

javac标记器使用String.strip缩进()方法,该方法具有以下实现注意事项:

此方法将所有空白字符视为具有相等的宽度。只要每行上的缩进一致地由相同的字符序列组成,那么结果将如上所述。

 类似资料:
  • 选项卡和空格混合用于相同的项目。 我需要代码缩进,但不要用空格替换制表符,反之亦然。我只需要缩进代码(带空格或制表符的新缩进并不重要)。 使用Eclipse IDE,但欢迎插件或其他工具。 另外,我知道在同一个项目中,使用相同的空白策略(制表符或白色)更好。 例如\t-- 之前 之后

  • 给定以下代码 输出如下(注意前导空格): 如何获得下面这样的字符串值(没有不必要的前导空格)?

  • 我需要检查代码不混合缩进空白和制表符。 如果同时满足以下两个条件,则代码中会混合空格和制表符: 有些行包含一个空格,直到第一个非空白字符(或行尾) 这是我一直想做的 但是当输入是 输入示例: 输出 你能解释一下我该怎么解决这个问题吗?

  • 问题内容: 在某处是否有标准的Google Go编码约定文档来设置制表符或空格在Go源代码中缩进是首选?如果不是,那么(统计上)更流行的选择是什么? 官方的建议是什么?(如果有) 最受欢迎的选择是什么? 问题答案: 官方建议使用以下格式格式化代码 或直接使用gofmt命令 您可以在golang.org博客上或“ 有效” go 文档中了解有关此内容的更多信息: 缩进 我们使用缩进标签,默认情况下go

  • 问题内容: 我是Python的新手。上面粘贴的程序特别在“ if temp == dna2:”行给我一个错误“缩进中的制表符和空格的不一致使用”。有人可以帮我找出缩进不正确的地方吗? 问题答案: 这意味着您在缩进中混合了空格和制表符。您必须解决此问题,使其与制表符或空格保持一致。

  • 问题内容: 我决定学习一点Python。第一部分介绍说它使用缩进来对语句进行分组。虽然最好的习惯显然是仅使用其中一种,但是如果我互换它们会发生什么呢?多少个空格将被视为等于一个制表符?如果将制表符和空格混合使用,还是根本无法工作? 问题答案: 空格不等同于制表符。用制表符缩进的行与用1、2、4 或8个 空格缩进的行的缩进不同。 通过反例证明( 错误或至多限制-tab!= 4个空格 ): 的‘显示一