如何获得字符串比较中的差异数量?

时间:2010-10-11 20:47:00

标签: c# .net regex string comparison

我知道我可以判断2个字符串的内容是否相等,但我需要能够得到比较2个字符串值的结果不同的字符数。

例如:

"aaaBaaaCaaaDaaaEaaa"
"aaaXaaaYaaaZaaaEaaa"

所以asnwer在这种情况下是3。

有没有一种简单的方法可以使用正则表达式,linq或任何其他方式执行此操作?

编辑:字符串也很长。说10k +字符。

5 个答案:

答案 0 :(得分:4)

如果有插入和删除: Levenstein distance

这是C# implementation

答案 1 :(得分:1)

您可以使用LINQ:

string a = "aaaBaaaCaaaDaaaEaaa";
string b = "aaaXaaaYaaaZaaaEaaa";

int result = a.Zip(b, (x, y) => x == y).Count(z => !z)
           + Math.Abs(a.Length - b.Length);

使用循环的解决方案可能更有效。

答案 2 :(得分:1)

嘿,看看这个:http://en.wikipedia.org/wiki/Hamming_distance

如果您想计算删除和插入,而不仅仅是替换,它将对您有所帮助。

答案 3 :(得分:0)

我只是循环遍历字符数组,为每个差异添加一个计数器。

但是,这不会考虑长度不同的字符串。

答案 4 :(得分:0)

如果两个字符串的长度相同且没有复杂的Unicode字符(如代理项),则可以遍历每个字符并在每个字符串中该索引处的字符不同时递增计数器。

理论上不可能更快地完成它。 (你需要检查每一个字符)