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()