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

如何在Groovy中更简洁地忽略X字符比较两个字符串?

简化Groovy字符串对比(忽略X字符)的实现

我有两个字符串:01xx01xx01 和 0101010111,希望仅对比其中非X的字符(例如提取出010101和010111进行对比)。自己编写了一段Groovy脚本可以正常运行,但代码行数较多,想找更简洁的实现方式。

原脚本代码:

a="01xx01xx01"
b="0101010111"
def compareStrings(String a,String b){
    i=0
    while (i<a.length){
        if (a[i] =="X" || b[i]=="X"){
            i+=1}
        else if (a[i]!=b[i]){
            return "Not Similar"}
        else{
            i+=1}
    return "Similar"
    }
}
def result = compareStrings(str1,str2)  
println(result) 

几种简洁实现方式

方法一:过滤后直接对比

利用Groovy的findAll方法过滤掉两个字符串中的X字符,再直接对比过滤后的结果,逻辑直观简洁:

def a = "01xx01xx01"
def b = "0101010111"

def compareStrings(String s1, String s2) {
    def filteredS1 = s1.findAll { it != 'X' }
    def filteredS2 = s2.findAll { it != 'X' }
    filteredS1 == filteredS2 ? "Similar" : "Not Similar"
}

println(compareStrings(a, b))

方法二:遍历过程中提前终止

如果追求更高效率(遇到不匹配就立刻返回,无需处理剩余字符),可以用eachWithIndex遍历,一旦发现非X字符不匹配就返回结果:

def a = "01xx01xx01"
def b = "0101010111"

def compareStrings(String s1, String s2) {
    s1.eachWithIndex { char c1, int idx ->
        def c2 = s2[idx]
        if (c1 != 'X' && c2 != 'X' && c1 != c2) {
            return "Not Similar"
        }
    }
    "Similar"
}

println(compareStrings(a, b))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:20:47