2010-04-15 47 views
3

是否存在一个库,甚至是标准的API调用,允许我对两个字符串进行比较,并将diff字符的数量作为int来获取?我不介意其他功能,只要能获得更多的程序化差异结果(比如int)而不是只输出整个人类可读的差异的东西。Java:将比较计数返回为int的字符串比较库?

+0

嗯,你会如何决定是否字符不同?例如如果两个字符串的长度不同,那么较长字符串的字符会被计为不同的字符还是相同?人物的秩序是否重要? – Tarski 2010-04-15 16:01:09

+0

以及将“史蒂夫汽车”与“史蒂夫汽车”进行比较的情况。那会是1个不同的字符(只是“'''”)还是6个不同的字符(整个“汽车”)?我认为有几种不同的方式来指定这个问题。 – Kip 2010-04-15 16:03:43

+0

你需要不同字符的确切数量吗? compareTo按照字典顺序做类似的事情,并返回一个int。 – Searles 2010-04-15 16:09:27

回答

5

我想你想要的是Leveshtein distance - 这告诉你需要多少次更改(插入,删除或替换)才能将一个字符串转换为另一个字符串。

例如,abcdeabcdef之间的差值为1,因为你在abcde最后的位置让abcdef后插入f

abcdeabcdf之间的差异也为1,因为你的第一个字符串与f取代e获得第二。

abcdeabde之间的差异为1,因为您在第一个字符串中删除c以获得第二个字符串。

这是implementation in Java

+1

旧的问题,但链接似乎被打破。 – 2013-04-26 04:47:43

+0

想看看链接的另一端是什么! – Troyseph 2015-02-13 15:15:02

1

我不知道任何标准的API调用,但你可以看到第三方库的引用,这个问题(并不奇怪 - 谷歌,Apache的百科全书......)

How to perform string Diffs in Java?
How to perform string Diffs in Java?

+0

啊,我看到一个StringUtils.difference(str1,str2).length()和StringUtils.difference(str2,str1).length()应该工作得很好。谢谢。 – Zombies 2010-04-15 17:11:44