Groovy中join("\n")数组结果在多行字符串中stripIndent()失效问题
Groovy中join("\n")生成的字符串在stripIndent()中无法正常缩进的问题解决
问题原因
stripIndent()的逻辑是:先找出所有非空行的最小缩进量,再给每行移除对应长度的空格。当你用list.join("\n")得到"one\ntwo"插入到多行字符串后,"one"前面有手动添加的2个空格,但"two"前面没有任何空格——这就导致所有非空行的最小缩进量为0,因此只有缩进量为0的行(也就是"two")会被处理,其他行的缩进会被保留,最终出现异常输出。
而普通单行变量能正常工作,是因为插入后整行都带有统一的2个空格,所有非空行的最小缩进量是2,stripIndent()会给每行都去掉2个空格,符合预期。
解决方法
给列表中的每个元素添加和多行字符串一致的缩进,再用join("\n")拼接,这样插入后所有行的缩进统一,stripIndent()就能正确处理。
修改后的代码示例:
def list = [ 'one', 'two' ] // 给每个列表元素添加与多行字符串相同的缩进(这里是2个空格) def listAsString = list.collect { " $it" }.join("\n") def string = """\ First line for listAsString $listAsString Last line """.stripIndent()
运行后输出符合预期:
First line for listAsString one two Last line
补充说明
如果你的多行字符串缩进不是2个空格,只需要把collect里的空格数改成对应长度即可,比如缩进是4个空格,就写成" $it"。
内容的提问来源于stack exchange,提问作者Friedrich 'Fred' Clausen
相关产品推荐
相关产品推荐

