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

 

 

 

 

 

 

 

 

 

+++++++++++++++++++++我是底線+++++++++++++++++++++

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM