由于公司項目需要對兩個檔案進行比較.(其實是資料庫文本字段)
并且顯示異同.
這裡不是進行一個簡單的比較.有一個檔案就是
text1 1234
text2 012324
這兩個檔案并不是一個字段都不同.是以用一個一個 對比的辦法是不可能的.因為text2 隻是在 text1的基礎上
在首字母上面增加了一個0 其他的沒有改變...由于項目緊..沒有自己實作..(自己實作也沒有什麼太好的思路)
這裡就不讨論原理了..
<a href="http://www.incava.org/projects/java/java-diff/"></a>
<a href="http://www.incava.org/projects/java/java-diff/">http://www.incava.org/projects/java/java-diff/</a>
<a href="http://www.incava.org/pub/java-diff/java-diff-1.0.5.tar.gz">檔案下載下傳</a>
這個是開源的解決方案..在網絡上面找到的.分享下.
實作很簡單一共有兩個類..兩jar包都沒有..直接把源檔案放到工程下面進行測試..
demo也是很簡單的.
要求輸入的是一個object[] 或是一個collection的接口...
這個就不說你是怎麼将你的檔案轉換成數組了.
下面看這個代碼:
在main函數裡面運作:
顯示結果:
del: [1,-1] add: [1,2]
del: [3,3] add: [5,5]
其中difference是顯示不同的類下面有4個屬性:
當delend 或 addend 為 -1 的時候表示不進行操作.
圖示:<add>表示增加<del>表示删除.
del: [1,-1] 沒有删除 add: [1,2]向a [1]中添加[1][2]
del: [3,3] 删除a中[3] add: [5,5] 向a中添加[5]
[start,end]表示操作的數組下标從0開始.起始結束.
注:進行了del操作.數組長度減少.添加數組長度增加.
其中你自己調用.delstart,delend , addstart,addend就可以對數組進行标示了....
如果代碼中的<add>換成其他的<b>标簽就可以在html中.顯示檔案的不同了.
通過arraylist 實作對資料的整理.用remove 删除.用add(index,object)進行添加.
結果:
a<add>x</add>bcde
a<add>y</add><add>x</add>bcde
a<add>y</add><add>x</add><del>b</del>cde
a<add>y</add><add>x</add><del>b</del>cd<add>j</add>e
最後顯示了a變成b的全部過程.