Java:返回差异计数的字符串比较库(以int形式)?

4

是否存在一个库或标准API调用,允许我比较两个字符串并得到不同字符的数量作为整数?我不介意其他特性,只要我可以获得更多编程化的差异结果(例如整数),而不是仅输出整个人类可读的差异。


哦,那你如何确定字符是否不同呢?例如,如果两个字符串长度不同,那么长字符串的字符算作不同字符还是相同字符?字符的顺序是否重要? - Tarski
那么将“steves car”与“steve's car”进行比较呢?这会有1个字符的差异(只是“'”)还是6个字符的差异(整个“'s car”)?我认为有几种不同的指定此问题的方式。 - Kip
你需要准确的不同字符数量吗?compareTo 在字典顺序中执行类似的操作并返回一个 int。 - Searles
@tarski:如果字符串更长,我想知道。顺序可以像在beyond和compare中一样重新排列。@kip:在这个例子中,仅相差1个字符...因此返回的整数将为1。 - Zombies
2个回答

6
我认为你想要的是 Leveshtein距离 - 它告诉你需要多少次改变(插入、删除或替换)才能将一个字符串转换为另一个字符串。
例如,abcdeabcdef 之间的差异为1,因为在 abcde 的最后一个位置后插入 f 就可以得到 abcdefabcdeabcdf 之间的差异也是1,因为你需要用第二个字符串中的 f 替换第一个字符串中的 eabcdeabde 之间的差异为1,因为你需要从第一个字符串中删除 c 才能得到第二个字符串。

Apache Commons Text中可以找到一个非常好的实现:LevenshteinDistance

这里有一些Java示例实现


1
老问题了,但链接似乎损坏了。 - Fergus Barker
很想看看那个链接的另一端有什么! - Troyseph
新增了链接。 - Robert

1

啊,我明白了,StringUtils.difference(str1, str2).length() 和 StringUtils.difference(str2, str1).length() 应该可以正常工作。谢谢。 - Zombies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接