检查Groovy中的字符串列表

时间:2017-04-04 10:03:23

标签: string for-loop groovy

我是groovy的新手并且在测试中有以下代码:

groovy> def country_list = [] 
groovy> country_list =['sg', 'ph', 'hk'] 
groovy> for (String item : country_list) { 
groovy>     println item 
groovy>     if (country_list[item].toUpperCase() == "PH") 
groovy>         isPH = true 
groovy> } 
groovy> println isPH 

在控制台中运行时,会抛出以下异常:

sg
Exception thrown

groovy.lang.MissingPropertyException: Exception evaluating property 'sg' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: sg for class: java.lang.String
at ConsoleScript6.run(ConsoleScript6:5)

错误是什么意思?

我确实解决了这个问题:

isPH = ('PH' in country_list) || ('ph' in country_list)

但是真的想了解上面的错误。 谢谢, 保罗

3 个答案:

答案 0 :(得分:2)

这是因为,您有列表country_list。 但是使用地图表示法来获取值。

sgfor循环列表中的第一个元素。它假定从sg获取属性country_list并且没有这样的属性,而sg只有相反的值。

因此出现了错误的错误:

  

错误groovy.lang.MissingPropertyException:   评估财产的例外情况' sg' for java.util.ArrayList,Reason:groovy.lang.MissingPropertyException:没有这样的属性:sg for class:java.lang.String

您可以使用以下脚本进行简单的检查/断言:

def country_list =['sg', 'ph', 'hk']
def isPH = country_list.find { it.toUpperCase() == 'PH' } ? true : false
assert isPH, 'No ph in the list'
println "Is country list contains ph ? $isPH"

答案 1 :(得分:2)

country_list[item]更改为item

这是因为groovy查找了类sg的属性ArrayList,因为groovy Object.getAt(String property)方法返回property的值

答案 2 :(得分:1)

是的错误并不明显;无论如何Try the below code and let me know if it works for you **CSS** .inner-table-data { margin-bottom: 0; } **HTML** <table class='table table-hover table-bordered table-striped'> <thead> <tr> <th>Status</th> <th>Name</th> <th>GuideWire</th> </tr> </thead> <tbody> <tr data-toggle='collapse' data-target='#info_1'> <td class="col-sm-4">Good</td> <td class="col-sm-4">FooBar</td> <td class="col-sm-4">Something else</td> </tr> <tr> <td colspan='1' class='collapse' id='info_1'> <div> <table class="table table-striped inner-table-data"> <thead> <th>ABC</th> <th>DEF</th> </thead> <tbody> <tr> <td>S1</td> <td>Blah</td> </tr> <tr> <td>S1</td> <td>Blah</td> </tr> </tbody> </table> </div> </td> </tr> <tr data-toggle='collapse' data-target='#info_2'> <td class="col-sm-4">Good 2</td> <td class="col-sm-4">FooBar 2</td> <td class="col-sm-4">Something else 2</td> </tr> <tr> <td colspan='1' class='collapse' id='info_2'> <div> <table class="table table-striped inner-table-data"> <thead> <th>ABC</th> <th>DEF</th> </thead> <tbody> <tr> <td>S1</td> <td>Blah</td> </tr> <tr> <td>S1</td> <td>Blah</td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> 引起了问题,我想你想要使用country_list[item].toUpperCase()

试试这个:

item.toUpperCase()

在groovyConsole here上运行解决方案。