为什么这个字符串→;列表→;地图转换不需要';我不能在Groovy中工作

为什么这个字符串→;列表→;地图转换不需要';我不能在Groovy中工作,groovy,data-conversion,Groovy,Data Conversion,我输入了类型为的数据 abc 12d uy 76d ce 12a 行由\n分隔,值由\t分隔 数据来自shell命令: brlist = 'mycommand'.execute().text 然后我想把它放到地图上: brmap = brlist.split("\n").collectEntries { tkns = it.tokenize("\t") [ (tkns[0]): tkns[1] ] } 我也试过了

我输入了类型为的数据

abc    12d
uy     76d
ce     12a
行由
\n
分隔,值由
\t
分隔

数据来自shell命令:

brlist = 'mycommand'.execute().text
然后我想把它放到地图上:

brmap = brlist.split("\n").collectEntries {
          tkns = it.tokenize("\t")
          [ (tkns[0]): tkns[1] ]
        }
我也试过了

brmap = brlist.split("\n").collectEntries {
          it.tokenize("\t").with { [ (it[0]): it[1] ] }
        }
两种方法都得到了相同的结果,这是一个只有一个条目的映射:

brmap.toString()
# prints "[abc:12d]"

为什么只有输入数据的第一行最终出现在映射中?

您的代码工作正常,这意味着输入字符串
brlist
与您所说的不同

你确定那就是你所拥有的吗?尝试打印
brlist
,然后在
collectionentries

另一方面,这与代码的作用相同:

brlist.split('\n')*.split('\t')*.toList().collectEntries()
或者您可以尝试(如果是空格而不是选项卡,则两者都可以)


您的代码正常工作,这意味着输入字符串
brlist
与您所说的不同

你确定那就是你所拥有的吗?尝试打印
brlist
,然后在
collectionentries

另一方面,这与代码的作用相同:

brlist.split('\n')*.split('\t')*.toList().collectEntries()
或者您可以尝试(如果是空格而不是选项卡,则两者都可以)

此代码有效

// I use 4 spaces as tab.
def text = 'sh abc.sh'.execute().text.replaceAll(" " * 4, "\t")
brmap = text.split("\n").collectEntries {
    tkns = it.tokenize("\t")
    [(tkns[0]) : tkns[1]]
}
assert[abc:"12d", uy:"76d", ce:"12a"] == brmap
abc.sh

#!/bin/sh
echo "abc    12d"
echo "uy    76d"
echo "ce    12a
另外,我认为您的groovy代码是正确的。可能您的
mycommand
有问题。

此代码有效

// I use 4 spaces as tab.
def text = 'sh abc.sh'.execute().text.replaceAll(" " * 4, "\t")
brmap = text.split("\n").collectEntries {
    tkns = it.tokenize("\t")
    [(tkns[0]) : tkns[1]]
}
assert[abc:"12d", uy:"76d", ce:"12a"] == brmap
abc.sh

#!/bin/sh
echo "abc    12d"
echo "uy    76d"
echo "ce    12a

另外,我认为您的groovy代码是正确的。也许你的
mycommand
有问题。

好的,谢谢你的提示,这是Jenkins中的一个bug:


这里已经提到过:

好的,谢谢你的提示,这是Jenkins中的一个bug:


前面已经提到过:

代码无法运行。我正在使用Jenkins Groovy管道脚本<代码>groovy.lang.MissingMethodException:没有方法的签名:[Ljava.lang.String;.split()适用于参数类型:(java.lang.String)值:[]可能的解决方案:split(groovy.lang.Closure)、wait()、init()、sort()、tail()、toList()该代码没有运行。我正在使用Jenkins Groovy管道脚本。
Groovy.lang.MissingMethodException:没有方法签名:[Ljava.lang.String;.split()适用于参数类型:(java.lang.String)值:[]可能的解决方案:split(Groovy.lang.Closure)、wait()、init()、sort()、tail()、toList()