8

我想检查一个列表是否包含特定的字符串。

在检查列表中的所有条目之前,应该在 sting 中。小写

我试过这样

 def venueName = params.name
 def venueNameLists = Venue.executeQuery("select name from Venue")
  if(venueNameLists.toLowerCase().contains(venueName.toLowerCase())){
            error = true;
            log.debug("save :: duplicate name")
            flash.message = "Venue name already exist";
            render(view: "create", model: [venueInstance: new Venue(params)])
            return
        }

给出错误

  No signature of method: java.util.ArrayList.toLowerCase() is applicable for argument types: () values: []. Stacktrace follows:

  groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toLowerCase() is applicable for argument types: () values: []
4

3 回答 3

22

我同意aiolos:使用约束或尝试按名称查找实例忽略大小写。但是要以您的方式解决此问题,请尝试*.传播运算符):

venueNameLists*.toLowerCase().contains(venueName.toLowerCase()) 
于 2013-01-09T09:01:27.070 回答
6

如果您想在保存元素之前检查重复条目,请在域类上使用约束。如果需要不区分大小写,您可以在这里使用唯一约束或实现自己的约束。

如果您需要手动检查,请尝试以下操作:

def venueWithNameFromParams = Venue.findByNameIlike(params.name) // ignore case
if(venueWithNameFromParams){
    // venueName is in venueNameList
} 
于 2013-01-09T08:41:28.173 回答
-1

如果您正在寻找如何检查多个字符串是否包含一个单词,同时忽略区分大小写,请在单词的正则表达式上使用 (?i)。

例如,以下将是肯定条件:

word = "YES"
word.matches(/(?i)yes|ok|true/)
于 2018-11-19T11:56:39.083 回答