gpt4 book ai didi

grails - Groovy 字符串匹配 90%(忽略字母大小写)

转载 作者:行者123 更新时间:2023-12-02 09:36:49 26 4
gpt4 key购买 nike

我需要编写一个 Groovy 函数来检查两个给定字符串是否匹配至少 90%。我只是想知道是否有人知道我可以在 Grails 项目中使用的已经存在的实用方法。我还没有真正编写该方法,但理想情况下它是这样工作的:

def doStringsMatch(String str1, String str2) {
if (str1 and str2 match at least 90% or
str1 appears in str2 somewhere or
str2 appears in str1 somewhere)
return true
else
return false
}

谢谢

最佳答案

这是 Levenshtein distance 的常规实现,基本上它返回两个字符串看起来相似程度的百分比。 0 表示它们完全不同,1 表示它们完全相同。此实现不区分大小写。

  private double similarity(String s1, String s2) {
if (s1.length() < s2.length()) { // s1 should always be bigger
String swap = s1; s1 = s2; s2 = swap;
}
int bigLen = s1.length();
if (bigLen == 0) { return 1.0; /* both strings are zero length */ }
return (bigLen - computeEditDistance(s1, s2)) / (double) bigLen;
}

private int computeEditDistance(String s1, String s2) {
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();

int[] costs = new int[s2.length() + 1];
for (int i = 0; i <= s1.length(); i++) {
int lastValue = i;
for (int j = 0; j <= s2.length(); j++) {
if (i == 0)
costs[j] = j;
else {
if (j > 0) {
int newValue = costs[j - 1];
if (s1.charAt(i - 1) != s2.charAt(j - 1))
newValue = Math.min(Math.min(newValue, lastValue),
costs[j]) + 1;
costs[j - 1] = lastValue;
lastValue = newValue;
}
}
}
if (i > 0)
costs[s2.length()] = lastValue;
}
return costs[s2.length()];
}

关于grails - Groovy 字符串匹配 90%(忽略字母大小写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com