2012-04-27 80 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有說,有缺陷或功能?

相關問題