Groovy 检查列表是否为';s值包含在字符串中
我有一个列表Groovy 检查列表是否为';s值包含在字符串中,groovy,Groovy,我有一个列表def vrs=[“6.0”、“6.1”、“6.1.0”](版本),我在一个函数中得到一个映射,该值def test=[version:6.1 HotFix11] 如何检查test的version值是否与列表vrs匹配 我尝试了这个vrs.each{ver->println test.version.contains(ver)}但是它在线程“main”java.lang.StackOverflowerError中给出了异常 更新 事实证明,我的代码有问题。我在一个小的Groovy脚本
def vrs=[“6.0”、“6.1”、“6.1.0”]
(版本),我在一个函数中得到一个映射,该值def test=[version:6.1 HotFix11]
如何检查test
的version
值是否与列表vrs
匹配
我尝试了这个vrs.each{ver->println test.version.contains(ver)}
但是它在线程“main”java.lang.StackOverflowerError中给出了异常
更新
事实证明,我的代码有问题。我在一个小的Groovy脚本中尝试了这个测试用例,它很有效
以下是完整的代码:
private Map params
private def root
private def nineBelow
XmlHandler(String xml)
{
nineBelow=["6.0","6.1","6.1.0"]
params=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
/*nineBelow.each {
println params.version //even this throws java.lang.StackOverflowError
//println "$it , ${params.version}"
//println ver.getClass()+", "+params.version.getClass()
}*/
println nineBelow.each{ver-> println params.version.contains(ver)}
/*I need to check whether `params.version` matches with `nineBelow` list, so i'll check for condition here*/
params
}
另一个调用getParams()
更新
甚至println nineBelow.each{println params.version}
在线程“main”java.lang.StackOverflower中给我异常
更多更新
它只有在下面的代码之后才能工作
def ver=params.version
println nineBelow.each { println ver.contains(it) }
这里的问题是什么?您是否有一个示例在某些示例xml中失败?我这样问是因为这个(你在问题的顶部说)实际上是有效的:
def vrs=["6.0","6.1","6.1.0"]
def test=[ version:'6.1 HotFix11' ]
vrs.each { ver-> println test.version.contains( ver ) }
和打印:
false
true
false
但是我找不到您的其他代码有问题,因为我不知道
'E://Projects/agent6.1.xml'
包含什么…我猜您的代码如下所示:
class XmlHandler {
private Map params
private def root
private def nineBelow
XmlHandler(String xml)
{
nineBelow=["6.0","6.1","6.1.0"]
params=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
nineBelow.each {
println params.version //even this throws java.lang.StackOverflowError
//println "$it , ${params.version}"
//println ver.getClass()+", "+params.version.getClass()
}
}
}
def doc = """
<root>
<product>
<version>1.0</version>
<version>2.0</version>
<version>3.0</version>
<version>4.0</version>
<version>5.0</version>
</product>
</root>
"""
XmlHandler handler = new XmlHandler(doc)
handler.getParams()
类XmlHandler{
私有映射参数
私有def根
私人def nineBelow
XmlHandler(字符串xml)
{
nineBelow=[“6.0”、“6.1”、“6.1.0”]
参数=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
九个一个{
println params.version//即使这样也会抛出java.lang.StackOverflower错误
//println“$it,${params.version}”
//println ver.getClass()+“,”+params.version.getClass()
}
}
}
def doc=”“”
1
2
3
4
5
"""
XmlHandler=新的XmlHandler(文档)
handler.getParams()
因此,在println params.version
中,您实际上正在调用getParams().version
,从而进入一个无休止的递归调用
检查。正如tim_yates所说,“bug还是feature?”我试过一个例子,这个例子也很好用。但无论如何,问题已经解决了。查看我问题中的更多更新您能解决另一个问题吗?我使用了错误的jar而不是
groovy-all-1.8.6.jar
我使用的groovy-1.8.6.jar
解决了我的另一个问题。谢谢
class XmlHandler {
private Map params
private def root
private def nineBelow
XmlHandler(String xml)
{
nineBelow=["6.0","6.1","6.1.0"]
params=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
nineBelow.each {
println params.version //even this throws java.lang.StackOverflowError
//println "$it , ${params.version}"
//println ver.getClass()+", "+params.version.getClass()
}
}
}
def doc = """
<root>
<product>
<version>1.0</version>
<version>2.0</version>
<version>3.0</version>
<version>4.0</version>
<version>5.0</version>
</product>
</root>
"""
XmlHandler handler = new XmlHandler(doc)
handler.getParams()