- 浏览: 374975 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (148)
- java (89)
- flex (7)
- sns (3)
- jquery mobile gwt html5 (1)
- VirtualBox Centos 安装 (2)
- tomcat (1)
- nginx (2)
- centOS (7)
- memcache (2)
- hadoop (3)
- hbase (3)
- install (1)
- cloudera (3)
- tools (0)
- gen code (0)
- Mysql (2)
- KinderEditor (1)
- flash chart (1)
- ntsysv (1)
- hibernate search (2)
- compass (1)
- lucence (2)
- hibernate (1)
- jboss cache (0)
- 二级缓存 (1)
- maven (1)
- debian (1)
- go (1)
- golang (2)
- html5 (1)
最新评论
-
llh1985:
wave牛人~~求联系~~~邮箱llh1985@163.com ...
GWT Wave 开源代码运行跑通分析(1) -
zhengliming123:
[img][img][*][*][/flash][*]|[/i ...
hibernate Search 学习研究 附件是maven工程 -
di1984HIT:
写得很嗯好啊。
CentOS 安装 hadoop hbase 使用 cloudera 版本。(一) -
itfanr:
楼主写的真好 本地godoc
Golang 1.0 文档使用。godoc ,go 命令 学习 ,本地运行 gotour -
phe441:
灰常感谢楼主,爱死你了
URL rewrite 3.2 jar 和 文档 pdf 下载
由于公司项目需要对两个文件进行比较.(其实是数据库文本字段)
并且显示异同.
这里不是进行一个简单的比较.有一个文件就是
text1 1234
text2 012324
这两个文件并不是一个字段都不同.所以用一个一个 对比的办法是不可能的.因为text2 只是在 text1的基础上
在首字母上面增加了一个0 其他的没有改变...由于项目紧..没有自己实现..(自己实现也没有什么太好的思路)
这里就不讨论原理了..
http://www.incava.org/projects/java/java-diff/
这个是开源的解决方案..在网络上面找到的.分享下.
实现很简单一共有两个类..两jar包都没有..直接把源文件放到工程下面进行测试..
demo也是很简单的.
Object[] a = new Object[] { "a", "b", "c", "d", "e" }; Object[] b = new Object[] { "a", "x", "y", "b", "c", "j", "e", }; Difference[] expected = new Difference[] { new Difference(1, -1, 1, 2), new Difference(3, 3, 5, 5), }; Diff diff = new Diff(a, b); List diffOut = diff.diff();
要求输入的是一个Object[] 或是一个Collection的接口...
这个就不说你是怎么将你的文件转换成数组了.
String strs = "123456"; char[] strChars = strs.toCharArray(); Object[] objs = new Object[strChars.length]; for( int i = 0; i < strChars.length; i ++){ objs[i] = strChars[i]; }
下面看这个代码:
public static void main(String[] args) { Object[] a = new Object[] { "a", "b", "c", "d", "e" }; Object[] b = new Object[] { "a", "x", "y", "b", "c", "j", "e", }; Diff diff = new Diff(a, b); List diffOut = diff.diff(); for (int i = 0; i < diffOut.size(); i++) { Difference diffce = (Difference) diffOut.get(i); System.out.println(diffce); } }
在main函数里面运行:
显示结果:
del: [1,-1] add: [1,2]
del: [3,3] add: [5,5]
其中difference是显示不同的类下面有4个属性:
/** * The point at which the deletion starts. */ private int delStart = NONE; /** * The point at which the deletion ends. */ private int delEnd = NONE; /** * The point at which the addition starts. */ private int addStart = NONE; /** * The point at which the addition ends. */ private int addEnd = NONE;
当delEnd 或 addEnd 为 -1 的时候表示不进行操作.
//abcde //01234 //a<add>xy</add>cde //0 12 345 //a<add>xy</add>c<del>d</del>e //0 12 3 4 //a<add>xy</add>bc<del>d</del><add>j</add>e //0 12 34 5 6
图示:<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中.显示文件的不同了.
public static void main(String[] args) { Object[] a = new Object[] { "a", "b", "c", "d", "e" }; Object[] b = new Object[] { "a", "x", "y", "b", "c", "j", "e" }; Diff diff = new Diff(a, b); List diffOut = diff.diff(); for (int i = 0; i < diffOut.size(); i++) { Difference diffce = (Difference) diffOut.get(i); System.out.println(diffce); } // abcde // 01234 // a<add>xy</add>cde // 0 12 345 // a<add>xy</add>c<del>d</del>e // 0 12 3 4 // a<add>xy</add>bc<del>d</del><add>j</add>e // 0 12 34 5 6 ArrayList list = new ArrayList(); for (int i = 0; i < a.length; i++) { list.add(a[i]); } for (int i = 0; i < diffOut.size(); i++) { Difference tempDiff = (Difference) diffOut.get(i); int delStart = tempDiff.getDeletedStart(); int delEnd = tempDiff.getDeletedEnd(); int addStart = tempDiff.getAddedStart(); int addEnd = tempDiff.getAddedEnd(); if (delEnd != -1) { // delEnd == -1 就是不进行刪除... // 删除开始. for (int j = delStart; j <= delEnd; j++) { // 删除多个. list.remove(j); if (delStart != 0) { String temp = list.get(delStart - 1).toString(); list.remove(delStart - 1); list .add(delStart - 1, temp + "<del>" + b[j] + "</del>"); } else { String temp = list.get(0).toString(); list.remove(0); list.add(0, temp + "<del>" + b[j] + "</del>"); } pirntList(list); } } if (addEnd != -1) { // addEnd == -1 就是不进行添加... // 下面添加的情况.. for (int j = addStart; j <= addEnd; j++) { // 添加多个. if (addStart > list.size()) { list.add("<add>" + b[j] + "</add>"); } else { list.add(addStart, "<add>" + b[j] + "</add>"); } pirntList(list); } } } pirntList(list); // return buffer.toString(); } public static void pirntList(List list) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < list.size(); i++) { buffer.append(""+list.get(i)); } System.out.println(buffer.toString()); }
通过ArrayList 实现对数据的整理.用remove 删除.用add(index,object)进行添加.
结果:
del: [1,-1] add: [1,2]
del: [3,3] add: [5,5]
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<add>y</add><add>x</add><del>b</del>cd<add>j</add>e
最后显示了a变成b的全部过程.
- myDemo.zip (899 Bytes)
- 下载次数: 30
评论
发表评论
-
在CSDN上面也开通了博客
2013-02-27 22:41 936在CSDN上面也开通了博客 CSDN 现在发布文章 ... -
resin 服务器学习 配置 单点和 集群
2011-12-08 00:45 2085使用的 resin 4 服务器 ... -
CentOS 安装 Memcache 服务器. java 做客户端.
2011-11-07 18:35 37371,下载安装第三方源: CentOS 6 或 R ... -
CentOS rpm 安装 java 环境 tomcat nginx.
2011-11-03 19:17 7518首先测试更新. yum update ... -
android 源文件 zip包下载.地址
2011-06-20 15:19 1899android 源文件 zip包下载. 网络上面提供了 ... -
读取 jpa 的配置文件.添加自己的属性.
2011-06-15 16:03 1812package com.freewebsys.sns.c ... -
构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码
2011-05-05 11:44 1626构建富客户端程序 GWT2.3 + Guice3.0 + ... -
Guice 3.0 学习 persist jpa
2011-03-18 17:39 1553guice 3.0 的 persist 实现 使用的是 ... -
自己弄 开源 CMS 内容发布系统 主要表设计。
2011-03-10 11:34 3867--CMS栏目表 CREATE TABLE ... -
坚信 Debian是比Ubuntu更稳定的操作系统
2011-03-07 14:28 2334坚信 Debian是比Ubuntu更稳定的操作系统 自 ... -
eclipse 3.6 sp2 减肥记录
2011-03-04 09:46 1693喜欢 eclipse 但是 发现 eclipse 的功能很多 ... -
记录 2010 01 12 开始 给 自己 2 年 的时间 去弄 一个 gwt sns
2011-01-13 12:57 1340记录 2010 01 12 开始 给 自己 2 ... -
mac os x86 下 intel 无限驱动下载
2011-01-09 10:45 1435是在 googlecode 的项目 http://co ... -
Macos 下面 开源软件 下载
2011-01-06 16:06 1923macos 常用 软件 下载 macos 官方网站下载 ... -
Ubuntu 更新文件 桌面 菜单丢失, 打算 换 mac os
2011-01-04 11:32 2045ubuntu 是 2009 年 安装 ... -
做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 spring hibernate 如何 ?
2010-12-27 12:48 1495做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 ... -
Goolge appengine 又可以用了。高兴啊。。
2010-12-15 09:37 759突然想访问下自己的应用。 发现 自己的 appengi ... -
将google app engine 进行 本地化 可写文件 创建线程 去除白名单
2010-12-10 17:36 1935最近 看到 appgeng 被 ... -
设计 一个 oa 当中 的日历显示 跳转 上月 下月
2010-12-01 13:36 1373主要就是利用 java的Calendar 类 ... -
设计实现 一个 基于extjs2.0 做皮肤的 struts2 样式
2010-11-29 14:37 1836想法在 一年前 产生的。 首先使用 extjs2.0 ...
相关推荐
在IT行业中,有时候我们需要对比两个文件的差别,特别是在软件开发、文本编辑或代码审查的过程中。"比较文件的差别"是一个重要的任务,可以帮助我们找出文件之间的异同,从而进行精确的修改和更新。在这个场景下,...
3. **KDiff3**:这是一款跨平台的对比工具,不仅能够对比两个文件,还能同时对比三个文件并进行三向合并。它的界面简洁,操作方便,适合代码开发和文档编辑。 4. **SourceTree**:虽然主要是一款Git图形化客户端,...
此类工具的主要作用在于,对两个文件或文件夹进行深入的对比分析,找出它们之间的异同,以便于程序员们理解代码的变更历史,解决冲突,或者进行版本控制。 1. **文件内容对比**:这是最基本的功能,可以针对两个...
1. **文件比较**:WinMerge能够对两个文本文件进行逐行比较,高亮显示不同之处。无论是编程时查找代码差异,还是编辑文档时检查改动,它都能提供直观的界面和精确的比较结果。用户还可以选择忽略空格、制表符等细微...
1. 文件内容比较:WinMerge的核心功能是对比两个文件的内容,它可以精确到每一行甚至每一个字符,显示两份文档的差异,使用户能迅速定位并理解差异所在。 2. 文件夹比较:除了单个文件的对比,WinMerge还能比较整个...
Compare插件的出现,就解决了这个问题,让我们能够快速、准确地找出两个文件之间的异同。 首先,安装Compare插件非常简单。将解压后的“ComparePlugin.dll”文件复制到Notepad++的安装目录下的plugins子目录,然后...
首先,代码差异比对(Code Diff)的基本原理是对两个文本文件进行逐行或逐字符的比较,找出其中的异同。通过高亮显示不同的部分,使得用户可以直观地看到变更的具体内容。比对结果通常会显示为三栏视图,左右两侧...
使用ComparePlugin,用户可以直观地看到两个文件的异同,有助于快速定位和解决问题。 下面,我们将详细介绍Notepad++插件的使用,以及ComparePlugin的一些关键功能: 1. **安装Notepad++插件**: - 用户可以通过...
工作原理上,TXT内容对比工具一般采用逐行或逐字符扫描的方式,通过算法计算两个文件的相似度和差异点。常见的比较算法包括最长公共子序列、编辑距离等,这些算法能高效地找出文件间的最小编辑操作次数,从而确定...
它支持Windows操作系统,能够清晰地展示两个文件或文件夹之间的差异,并提供方便的合并功能,使得开发者可以快速定位并修复问题。 WinMerge的核心功能包括: 1. **文本对比**:它可以逐行比较两个文本文件的差异,...
标题 "DOS 和 Linux 常用命令的对比" 提供了一个关于两个操作系统命令行界面的比较主题。这篇博文可能探讨了 DOS(Disk Operating System)和 Linux 的命令行工具之间的相似性和差异性,帮助用户更好地理解和操作这...
在Eskil中,你可以方便地对比两个文件或目录,发现它们之间的异同。这对于开发人员来说极其有用,特别是在协同开发项目中,需要经常检查不同版本之间的更改。通过其直观的图形界面,Eskil可以清晰地呈现差异,使用户...
- **比较文件**:比较两个文件的异同。 ##### 5.7 文件的备份与恢复工具 - **tar**:打包和解包文件。 - **cpio**:复制文件和目录。 ##### 5.8 文件的压缩和解压工具 - **compress/pack/gzip/pkzip**:对文件进行...
Linux与Windows作为两大主流操作系统,其设计哲学、架构理念及应用领域存在显著差异,同时也有一些相似之处。深入探究它们的特点,对于帮助用户做出更合适的选择有着重要意义。 首先,在系统安装方面,Linux与...
查看两个文件或两份数据的异同。 49. **sed**:流编辑器。对文件或流进行模式匹配和替换操作。 50. **awk**:文本分析工具。用于处理和分析结构化的文本数据。 51. **tar -czvf** 和 `tar -xzvf`:创建和提取tar....
PDFBox可以比较两个PDF文档的差异,包括文字、图像、布局等方面的异同,这对于文档版本控制和审核非常有用。 在C#环境中,使用PDFBox-1.7.0.dll,开发者通常需要通过引用该DLL,然后调用其中的类和方法来实现上述...
这类软件主要用于比较两个代码文件或代码库之间的差异,帮助用户找出它们之间的异同,从而进行有效的代码审查、合并冲突或者查找错误。在编程工作中,尤其是在团队协作中,代码对比软件扮演着至关重要的角色。 首先...
HDFS的核心由两个主要组件构成:NameNode和DataNode。NameNode作为主节点,负责管理文件系统的元数据,包括文件和数据块的映射关系。DataNodes则是数据存储节点,它们保存实际的数据块,并定期向NameNode发送心跳包...
- **免费开源**:用户可以自由地获取源代码并对其进行修改。 - **稳定性高**:长期运行不容易崩溃。 - **安全性强**:由于其权限管理和隔离机制,相对更难被恶意软件攻击。 - **社区支持广泛**:有大量的开发者...