You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy检查列表是否含指定值时if条件判定失败问题排查

Groovy中字符串包含判定失败的问题排查

我来帮你分析一下问题所在——你这段Groovy代码的核心问题出在对result子列表的处理逻辑上,和Java的语法差异无关,是代码迁移时的逻辑误写。

先看你出问题的代码段:

for(int i =0; i<result.size(); i++){ 
    List<String> text=new ArrayList<>(); 
    text.add(result.get(i)+""); // 这里是关键错误!
    log.info text 
    for (int j=0; j<text.size(); j++){ 
        if(text.get(j).contains(needle)){ 
            // ... 判定逻辑
        } 
    }
}

问题原因

你提到result是包含两个子列表的列表(也就是List<List<String>>类型),但在代码里,你每次循环都新建了一个text列表,然后把整个子列表转成字符串(result.get(i)+"")添加进去。这会导致:

  • text永远只有1个元素,这个元素是子列表的字符串表示(比如类似["xxx", "UAN: 123", "yyy"]这样的字符串),而不是子列表里的单个字符串元素。
  • 你后续用text.get(j).contains(needle)去匹配,本质是在搜索这个子列表的字符串形式里是否包含"UAN: 123",而不是搜索子列表中的元素,自然找不到目标值。

而你在Java中能正常运行,应该是因为Java代码里直接将result.get(i)(也就是子列表本身)赋值给了text,而不是把它转成字符串再添加到新列表里。

修正后的代码

只需要修改text的赋值逻辑,直接获取原有的子列表即可:

static void main(String args[]) { 
    int count = 0; 
    String needle = "UAN: 123"; 

    for(int i = 0; i < result.size(); i++){ 
        List<String> text = result.get(i); // 直接获取子列表,无需转字符串新建列表
        log.info text 
        for (int j = 0; j < text.size(); j++){ 
            if(text.get(j).contains(needle)){ 
                System.out.println("FOUND"); 
                log.info "FOUND" 
                count = j; 
                System.out.println("THIS IS IT: " + text.get(count)); 
                log.info text.get(count) 
            } 
        } 
    } 
}

更简洁的Groovy写法

Groovy支持更优雅的遍历语法,完全可以抛弃传统的for循环,让代码更易读:

static void main(String args[]) { 
    String needle = "UAN: 123"; 
    int count = 0;

    result.eachWithIndex { subList, index ->
        log.info subList
        subList.eachWithIndex { item, itemIndex ->
            if (item.contains(needle)) {
                println "FOUND"
                log.info "FOUND"
                count = itemIndex
                println "THIS IS IT: ${item}"
                log.info item
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:13:27