将字符串变量转换为列表 [Groovy]
Posted
技术标签:
【中文标题】将字符串变量转换为列表 [Groovy]【英文标题】:Convert String variable to a List [Groovy] 【发布时间】:2013-02-14 00:32:03 【问题描述】:如何将此String
变量转换为List
?
def ids = "[10, 1, 9]"
我尝试过:List
和 toList();
【问题讨论】:
已经是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 String集合转换为Java String Array?
GroovyGroovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )