2010-04-15 44 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