检查列表的值是否包含在字符串中

时间:2012-04-27 06:28:05

标签: groovy

我有一个列表def vrs=["6.0","6.1","6.1.0"](版本),我在一个具有此值def test=[version:6.1 HotFix11]的函数中得到一个映射。

如何检查test的{​​{1}}值是否与列表version匹配?

我试过了vrs,但它提供了vrs.each{ver-> println test.version.contains(ver)}

更新

事实证明,我的代码有问题。我在一个小的Groovy脚本中尝试了测试用例,它可以工作。

以下是完整代码:

Exception in thread "main" java.lang.StackOverflowError

另一个叫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()

更新

即使static main(args) { String fileContents = new File('E://Projects/agent6.1.xml').text XmlHandler xm=new XmlHandler(fileContents) def params=xm.getParams() println params } 给了我println nineBelow.each { println params.version}

更新

仅在以下代码

之后才有效
Exception in thread "main" java.lang.StackOverflowError

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

您是否有一个示例失败了一些示例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'包含什么......

答案 1 :(得分:1)

我猜您的代码如下:

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

因此,在println params.version中,您实际上正在调用getParams().version,从而进入无休止的递归调用。

检查Groovy @ symbol before fields。正如 tim_yates 那样,¿bug或功能?