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