将字符串变量转换为列表 [Groovy]

Posted

技术标签:

【中文标题】将字符串变量转换为列表 [Groovy]【英文标题】:Convert String variable to a List [Groovy] 【发布时间】:2013-02-14 00:32:03 【问题描述】:

如何将此String 变量转换为List

def ids = "[10, 1, 9]"

我尝试过:ListtoList();

【问题讨论】:

已经是groovy中的列表了? 这是一个List,你想把它转换成String吗? 但是当我做 ids.eachprintln it 我有这个结果:[ 1 0 , 1 ] 【参考方案1】:
def l = Eval.me(ids)

获取 groovy 代码字符串(在本例中为“[10,1,9]”)并将其评估为 groovy。这将为您提供一个包含 3 个整数的列表。

【讨论】:

jameswiseman.com/blog/2011/01/18/jslint-messages-eval-is-evil @AlexanderSuraphel 语言错误。 @chrylis 是什么意思? @AlexanderSuraphel 我会为他回答:您的文章与 javascript 相关(特别是 JSLint)。但问题本身是关于 Groovy 的。 我不会考虑使用 Eval 作为安全选项。【参考方案2】:
def l = ids.split(',').collectit as int

【讨论】:

我想你想把一个字符串 "10,1,9" 变成一个列表 [10,1,9] def id = ids.substring(1,ids.length()-1) def l= id.split(',').collectit as int 我找到了这个解决方案,但我认为不是最好的:def id = ids.substring(1,ids.length()-1) def l= id.split(',') .collectit as int 这对我很有用,特别是在 Jenkins 中,并且使用 String 而不是 Int:files = "'f1','f2'" list = files.split(',').collectit as String > list==['f1', 'f2'] > list[1]=='f2' 在编辑窗口关闭后更新我的:list = versionFile.split(',').collect() 适用于字符串。【参考方案3】:

使用内置的JsonSlurper!

Using Eval is dangerous,一旦数据类型改变,字符串操作解决方案将失败,因此它不适应。所以最好使用JsonSlurper。

import groovy.json.JsonSlurper

//List of ints 
def ids = "[10, 1, 9]"
def idList = new JsonSlurper().parseText(ids)

assert 10 == idList[0]

//List of strings 
def ids = '["10", "1", "9"]'
idList = new JsonSlurper().parseText(ids)

assert '10' == idList[0]

【讨论】:

这绝对应该被接受为正确答案。 对于使用字符串的我来说,这只适用于:'["string1", "string2"]' 而不是 "['string1', 'string2']" 从 jenkins 运行代码。 @herm 自己测试过,你是对的。我已经更新了答案【参考方案4】:

这对我有用。而Eval.me 在 Jenkins groovy 脚本中不起作用。我试过了。

assert "[a,b,c]".tokenize(',[]') == [a,b,c]

【讨论】:

Eval.me 对我也不起作用(Jenkins groovy 脚本)。但是,您的解决方案给出了错误的结果。我的字符串是“['/a/b/c/d@2/e/f/g/h/i/j/k/l.py::m[n-10-3-9-0/8- 17-12]',]" (实际上我在字符串中有更多的条目,但这是一般的想法)。标记化只返回内部列表,即“[n-10-3-9-0/8-17-12]'” 得分较高的答案对我不起作用。这个做到了。

以上是关于将字符串变量转换为列表 [Groovy]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Groovy 映射转换为 key="value" 字符串?

在 Groovy 中将字符串转换为 int

在 Groovy 中将整数转换为十六进制字符串

如何将Groovy String集合转换为Java String Array?

在 Groovy 中将字符串转换为 InputStream

GroovyGroovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )