原始字符串文字 - 删除前导缩进

Jac*_* G. 6 java string indentation rawstring java-12

编辑:原始字符串文字已从JDK 12中删除,但我将打开此问题并在重新引入Raw String Literals时相应地编辑它.


在测试Raw String Literals(这是Java 12中的预览功能)时,我遇到了以下代码片段:

System.out.println(`
        Test 1
            Test 2
                Test 3
`);
Run Code Online (Sandbox Code Playgroud)

其中输出如下:

          
        Test 1
            Test 2
                Test 3
                          
Run Code Online (Sandbox Code Playgroud)

但是,我希望输出类似于以下内容:

Test 1
    Test 2
        Test 3
Run Code Online (Sandbox Code Playgroud)

删除前导缩进以匹配预期格式的最简单方法是什么?

Jac*_* G. 7

伴随Raw String Literals作为Java 12中的预览功能是将要添加的新方法java.lang.String,其中之一就是String#align.其文档说明如下:

从多线串的基本主体周围移除垂直和水平白色空间边距,同时保留相对压痕.

...

对于每个非空白行,将删除最小前导空白字符.每个空格字符都被视为单个字符.特别是,制表符"\t"(U + 0009)被认为是单个字符; 它没有扩大.

前导和尾随空白行(如果有)将被删除.尾随空格被保留.

每行后缀换行符"\n"(U + 000A).

要使用此方法,我们可以将代码更改为以下内容:

System.out.println(`
    Test 1
        Test 2
            Test 3
`.align());
Run Code Online (Sandbox Code Playgroud)

其中输出以下内容(后缀为换行符,如文档所述):

Test 1
    Test 2
        Test 3
Run Code Online (Sandbox Code Playgroud)

  • 因此,您在代码中嵌入了一个相当大的常量字符串,只是为了在实例化后对其执行昂贵的操作,每次重复执行此语句.与好的旧"测试1 \n"+"测试2 \n"+"测试3 \n"方法相比,这看起来像向后退了一步...... (3认同)
  • 要添加它: - 这也可以使用`align(0)`来实现,其中参数接受输入缩进的空格,等同于`align().indent(0)` (2认同)