String a = 'string'
String b = 'This is a strin'
println b.containsSimilarity(a)
在Groovy中是否有类似虚构 containsSimilarity 的函数,可以说字符串的差异,所以 我想在中搜索“string” “这是一个strin”,经过比较后说 83%的字符串“string”在“这是一个strin”中找到。 类似于使用Spock时的断言
断言“string”==“string”
结果是:
“的字符串” == “〜应变” | 假 1差异(相似度83%) 串) 〜应变( - )
我如何在Groovy中执行此操作?所以不要比较两个字符串,而是要找到 String a 的大部分包含在字符串 b 中。如果a是b - > true的一部分,则为false和打印相似度百分比,并显示差异在哪里。
答案 0 :(得分:0)
def s1 = "string", s2 = "This is a strin"
def i = 0, j = 0, l1 = s1.size(), l2 = s2.size()
if (l1 >= l2) {
large = s1
small = s2
} else {
large = s2
small = s1
}
def percent = 100 / small.size()
def match(large, str) {
if (large.indexOf(str) == -1) {
return match(large, str.substring(0, str.size() - 1))
}
return str.size()
}
println(Math.round(match(large, small) * percent)) //83
答案 1 :(得分:0)
我挖掘了一些Spock代码,使用'similarity'作为关键字,很快就找到了EditDistance类。 Spock用于字符串距离计算的那个类。它只取决于 EditPathOperation,因此可以轻松提取 如果你想要漂亮的印刷版,请看EditPathRenderer。它取决于TextUtil.escape方法,但也可以提取。
但请注意,正如Peter Niederwieser记录的那样,这些课程计算Levenshtein距离,你注意到,这并不是你所需要的。作者也是如此,所以也许他可以为我的回答添加一些有价值的东西。