0

我需要知道两个字符串是否“匹配”,其中“匹配”基本上意味着两个字符串之间存在显着重叠。例如,如果 string1 是“foo”,而 string2 是“foobar”,这应该是匹配的。如果 string2 是“barfoo”,那也应该与 string1 匹配。但是,如果 string2 是“fobar”,这不应该是匹配的。我正在努力寻找一种聪明的方法来做到这一点。我是否需要先将字符串拆分为字符列表,或者是否有办法在 Groovy 中进行这种比较?谢谢!

4

2 回答 2

4

使用 Apache commons StringUtils:

@Grab( 'org.apache.commons:commons-lang3:3.1' )
import static org.apache.commons.lang3.StringUtils.getLevenshteinDistance

int a = getLevenshteinDistance( 'The quick fox jumped', 'The fox jumped' )
int b = getLevenshteinDistance( 'The fox jumped', 'The fox' )

// Assert a is more similar than b
assert a < b

Levenshtein Distance 告诉您一个字符串变为另一个字符串必须更改的字符数

所以要从'The quick fox jumped'to 'The fox jumped',你需要删除 6 个字符(所以它的得分为 6)

要从'The fox jumped'to获取'The fox',您需要删除 7 个字符。

于 2013-07-04T08:09:56.433 回答
1

根据您的示例,普通旧的String.contains可能就足够了:

assert 'foobar'.contains('foo')
assert 'barfoo'.contains('foo')
assert !'fobar'.contains('foo')
于 2013-07-04T00:20:43.813 回答