java操作对比两个字符串,将差异数据提取出来
记录瞬间
在实际的工作中,需要解决生成两次字符串结果进行对比的问题,将存在差异的字符串直接给出来。
当然,前提是需要将对比的两次结果,进行前期处理
比如:
a_str = "@com/enen#123.java=M:3-C:9|@com/hehe#456.java=M:282-C:0|@com/wawo#789.java=M:5-C:1|987.java=M:9-C:1|654.java=M:4-C:1"
b_str = "@com/enen#123.java=M:4-C:8|@com/hehe#456.java=M:22-C:260|@com/wawo#789.java=M:5-C:1|987.java=M:9-C:1|654.java=M:1-C:4"
下面的代码就是按照上述的字符串方式,进行使用的,如有修改可以根据自己实际情况进行更新
private String CompareData(String before, String latest){
// 如果两个字符串相同,那么就不需要进行对比了
if (before.equals(latest)) {return "";}
// 执行分割
String[] s1 = before.split("@");
String[] s2 = latest.split("@");
// 定义返回比对信息
StringBuilder contrastData = new StringBuilder();
// 将信息保存到哈希表中
Map<String, String> pack_before = new HashMap<String, String>();
Map<String, String> pack_latest = new HashMap<String, String>();
// 保存上一次信息过程
for (String temp: s1) {
if (temp.length() == 0) { continue; }
pack_before.put(temp.split("#")[0], temp.split("#")[1]);
}
// 保存当前信息过程
for (String temp: s2) {
if (temp.length() == 0) { continue; }
pack_latest.put(temp.split("#")[0], temp.split("#")[1]);
}
// 遍历前一次信息,与当前信息做以对比
for (Map.Entry e: pack_before.entrySet()) {
// 如果存在信息,进行下一步操作,否则,前一次信息中在当前执行的情况下,存在被删除的情况
if(pack_latest.containsKey(e.getKey())) {
// 对比前一次与当前的结果值是否相同,不同的话进一步对比
if (! pack_latest.get(e.getKey()).equals(e.getValue())) {
// 将包信息保存到整体信息中
contrastData.append("P:" + e.getKey() + "\n");
// 将类信息保存到链表中
List<String> beforeList = new ArrayList<>();
List<String> latestList = new ArrayList<>();
// 获取类信息的数组
String[] before_str = e.getValue().toString().split("\\|");
String[] latest_str = pack_latest.get(e.getKey()).toString().split("\\|");
// 遍历保存
for (String temp: before_str){
beforeList.add(temp);
}
for (String temp: latest_str){
latestList.add(temp);
}
// 将后一次中存在前一次的所有元素删除
latestList.removeAll(beforeList); for (String latestTemp : latestList) {
String getClass = latestTemp.split("=")[0];
// 决定是否存在对比的信息
boolean flag = true;
for (String beforeTemp: beforeList) {
if (beforeTemp.split("=")[0].equals(getClass)) {
flag = false;
}
if (contrastData.toString().contains(latestTemp)) {continue;}
if (flag) {
// 新增加的信息
contrastData.append("NC:" + latestTemp + "\n");
} else {
// 可以对比的信息,B代表前一次的,L代表最新一次
contrastData.append("B:" + beforeTemp + "-L:" + latestTemp + "\n");
flag = true;
}
}
}
}
} else {
System.out.println("already deleted!!" + e.getKey());
}
}
return contrastData.toString();
}
通过上述的对比,拿到了对比的结果如下:
P:com/wawo
B:654.java=M:1-C:4
L:654.java=M:4-C:1
P:com/hehe
B:456.java=M:22-C:260
L:456.java=M:282-C:0
P:com/enen
B:123.java=M:4-C:8
L:123.java=M:3-C:9
+++++++++++++++++++++我是底线+++++++++++++++++++++
java操作对比两个字符串,将差异数据提取出来的更多相关文章
- java string截取两个字符串之间的值
java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
- Java 中如何计算两个字符串时间之间的时间差?(单位为分钟)
Java 中如何计算两个字符串时间之间的时间差?(单位为分钟) import java.text.DateFormat; import java.text.ParseException; import ...
- Java-Runoob-高级教程-实例-字符串:10. Java 实例 - 测试两个字符串区域是否相等-uncheck
ylbtech-Java-Runoob-高级教程-实例-字符串:10. Java 实例 - 测试两个字符串区域是否相等 1.返回顶部 1. Java 实例 - 测试两个字符串区域是否相等 Java ...
- java 算法之 两个字符串中最大相同的子串
public class String_intern { public static void main(String[] args) { String old="aaaaabc1" ...
- java中判断两个字符串是否相等的问题
我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...
- python 对比两个字典的差异
实际遇到的问题逻辑很繁杂,就不全写了.最后是通过对比两个字典差异来解决的.找出两个字典的差异,可参考以下代码. dict1 = {'a':1,'b':2,'c':3,'d':4} dict2 = {' ...
- 用Java编程找到两个字符串中共有的字符
这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...
- linux对比两个文件的差异
在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...
- java例题_46 两个字符串拼接问题!
1 /*46 [程序 46 字符串连接] 2 题目:两个字符串连接程序,将两个字符串拼接在一起 3 */ 4 5 /*分析 6 * 两个字符串的拼接方法 7 * concat方式 8 * 当两个量都为 ...
随机推荐
- 关于getchar-scanf函数的相关坑!
首先,我们编写如下所示的代码: #include <stdio.h> void test(int n) { ; ; ; a = b; b = c; c = n; printf(" ...
- ArrayList Vector
100000条数据时:测了4次,分别是9ms/13ms:8ms/6ms:8ms/6ms:8ms/6ms[其中/前为ArrayList数据,/后为Vector数据]1000000条数据时:测了4次,分别 ...
- xshll 连接ubuntu出现 ssh服务器拒绝了密码
一般进行到这一步,可能是sshd的设置不允许root用户远程登录 首先修改一下vim /etc/sshd/ssh_config 修改成如下图: 如果找不到或修改不行 可以先用普通用户登录再su到roo ...
- 面试题:常用的http状态码
3XX 重定向 301 Moved Permanently 永久重定向,表示请求的资源已经永久的搬到了其他位置 302 Found 临时重定向,表示请求的资源临时搬到了其他位置 303 See ...
- Handler Looper 解析
文章讲述Looper/MessageQueue/Handler/HandlerThread相关的技能和使用方法. 什么是Looper?Looper有什么作用? Looper是用于给线程(Thread) ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十课 深入应用异步和协程(课堂笔记)
tornado 相关说明 需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能 从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库 impo ...
- centos+git+gitolite 安装和部署
一.部署环境 系统:CentOS 6.4x64 最小化安装 IP:192.168.52.131 git默认使用SSH协议,在服务器上基本上不用怎么配置就能直接使用.但是如果面向团队服务,需要控制权限的 ...
- __x__(7)0905第二天__HTML的发展
HTML的发展 浏览器各个厂商有不同的标准,一个网页的兼容性非常差. 于是,W3C出来了,作为公益组织定义了HTML标准. 在 1993.6 实现并发布了第一个 HTML. 在 1995.11 开始创 ...
- 19 ArcGIS Server 备份与恢复
一.备份过程 1.找到已经安装的arcgis server安装目录,并找到备份工具: 2.快捷键win + R启动cmd,将备份工具文件拖入cmd窗口,enter 3. 通过backup.py脚本进行 ...
- Lecture4_1&4_2.多维随机变量及其概率分布
1.二维随机变量(X,Y)的联合分布函数: F(x,y)=P(X≤x,Y≤y) 2.二维随机变量(X,Y)关于X的边缘分布函数: FX(x)=P(X≤x) =P(X≤x,Y<+∞) =F(x,+ ...