2012-04-27 26 views
3

我有一个列表def vrs=["6.0","6.1","6.1.0"](版本),我得到一个函数中的地图,其值为def test=[version:6.1 HotFix11]检查一个列表的值包含在一个字符串中?

如何检查testversion值是否与列表vrs匹配?

我想这vrs.each{ver-> println test.version.contains(ver)}但它给Exception in thread "main" java.lang.StackOverflowError

更新

原来我的代码有什么问题。我想在一个小的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()

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

更多更新

它下面的代码

def ver=params.version 
    println nineBelow.each { println ver.contains(it) } 

这里有什么问题后才工作?

回答

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'包含...

+0

我试过一个例子,它的工作原理也很好。但无论如何,问题得到解决。看到我的问题更多更新 – abi1964 2012-04-27 08:38:10

+0

你能解决另一个[问题在这里](http://stackoverflow.com/questions/10346903/how-to-use-a-groovy-class-in-a-jsp-page)? – abi1964 2012-04-27 10:08:32

+0

我正在使用错误的jar而不是'groovy-all-1.8.6.jar'我使用的是'groovy-1.8.6.jar'它解决了我的问题,另一个问题。谢谢 – abi1964 2012-04-27 10:58:38

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有说,有缺陷或功能?

相关问题