记录瞬间

在实际的工作中,需要解决生成两次字符串结果进行对比的问题,将存在差异的字符串直接给出来。

当然,前提是需要将对比的两次结果,进行前期处理

比如:

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操作对比两个字符串,将差异数据提取出来的更多相关文章

  1. java string截取两个字符串之间的值

    java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

  2. Java 中如何计算两个字符串时间之间的时间差?(单位为分钟)

    Java 中如何计算两个字符串时间之间的时间差?(单位为分钟) import java.text.DateFormat; import java.text.ParseException; import ...

  3. Java-Runoob-高级教程-实例-字符串:10. Java 实例 - 测试两个字符串区域是否相等-uncheck

    ylbtech-Java-Runoob-高级教程-实例-字符串:10. Java 实例 - 测试两个字符串区域是否相等 1.返回顶部 1. Java 实例 - 测试两个字符串区域是否相等  Java ...

  4. java 算法之 两个字符串中最大相同的子串

    public class String_intern { public static void main(String[] args) { String old="aaaaabc1" ...

  5. java中判断两个字符串是否相等的问题

    我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...

  6. python 对比两个字典的差异

    实际遇到的问题逻辑很繁杂,就不全写了.最后是通过对比两个字典差异来解决的.找出两个字典的差异,可参考以下代码. dict1 = {'a':1,'b':2,'c':3,'d':4} dict2 = {' ...

  7. 用Java编程找到两个字符串中共有的字符

    这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...

  8. linux对比两个文件的差异

    在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务 ...

  9. java例题_46 两个字符串拼接问题!

    1 /*46 [程序 46 字符串连接] 2 题目:两个字符串连接程序,将两个字符串拼接在一起 3 */ 4 5 /*分析 6 * 两个字符串的拼接方法 7 * concat方式 8 * 当两个量都为 ...

随机推荐

  1. Mapjoin和Reducejoin案例

    一.Mapjoin案例 1.需求:有两个文件,分别是订单表.商品表, 订单表有三个属性分别为订单时间.商品id.订单id(表示内容量大的表), 商品表有两个属性分别为商品id.商品名称(表示内容量小的 ...

  2. 英语口语练习系列-C39-舞蹈-谈论昨天的活动

    词汇-舞蹈(dancing) ballet body shaking sway the body have a good figure special training arm movement da ...

  3. Spring MVC工作流程

    本文回答Spring MVC如何处理一个请求的. 1.请求是由中央调度器DispatcherServlet接收的. 2.中央调度器将请求交给处理器映射器HandlerMapping,处理器映射器解析请 ...

  4. XVII Open Cup named after E.V. Pankratiev. GP of Two Capitals

    A. Artifact Guarding 选出的守卫需要满足$\max(a+b)\leq \sum a$,从小到大枚举每个值作为$\max(a+b)$,在权值线段树上找到最大的若干个$a$即可. 时间 ...

  5. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

    A. Odd Palindrome 所有回文子串长度都是奇数等价于不存在长度为$2$的偶回文子串,即相邻两个字符都不同. #include<cstdio> #include<cstr ...

  6. github第一次引用开源的库

    想要使用这个一个东西 第一步就是在中添加上面那句话. 这个应该是俩种使用方法,一种用于java中一个用作控件引用 此时就能使用我们引用的这个库了.

  7. CentOS下的Mysql的安装和使用

    1.使用安装命令 :yum -y install mysql mysql-server mysql-devel 安装完成却发现Myserver安装缺失,在网上找原因,原来是因为CentOS 7上把My ...

  8. [LeetCode] Largest Sum of Averages 最大的平均数之和

    We partition a row of numbers A into at most K adjacent (non-empty) groups, then our score is the su ...

  9. sql的基础用法

    # sql 对大小写不敏感 # 查询表中的所有信息 select * from `Customers`; # 查询指定字段 CustomerName,Country select CustomerNa ...

  10. Windows下自带压缩文件工具之-makecab

    在内网渗透时,当没有rar.7z等压缩工具时候,拖取文件的时候为了防止流量过大,又必须压缩把文件压缩.当然你可以自己上传一个压缩工具.Windows自带制作压缩文件工具makecb你可以了解哈.压缩单 ...