• 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() + " ");
                // 将类信息保存到链表中 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 + " "); } else {
                        // 可以对比的信息,B代表前一次的,L代表最新一次 contrastData.append(
    "B:" + beforeTemp + "-L:" + latestTemp + " "); 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

    +++++++++++++++++++++我是底线+++++++++++++++++++++

  • 相关阅读:
    cocos2dx-基本动画制作
    cocos2dx-CCScrollView的制作
    回调函数的作用
    cocos2dx-Action动作
    cocos2dx-cpptest的结构
    重载函数
    .h和.cpp的用法与区别
    NDK配置之体会
    Cocos2d-x 3.1 内存管理机制
    idea spring boot
  • 原文地址:https://www.cnblogs.com/wozijisun/p/10538338.html
Copyright © 2020-2023  润新知