1

我試圖在Java中進行文件比較。 如何搜索字符串中的下發生的歷史行(忽略空格)Java - 文件比較;在下一個並行行中搜索字符串(忽略空白)

如:

 **File1**    **File2** 
    <name>abc</name> | <name>abc</name>    Equal 
     <age>21</age> |         Not Equal 
<company>zyz</company> | <age>21</age>     Not Equal 
         | <company>zyz</company>  Not Equal 
與我的邏輯

目前,我已經與CSV

字符串
<name>abc</name>, <age>21</age>, <company>zyz</company>, ####Start of target File####, 
<name>abc</name>,    , <age>21</age>, <company>zyz</company> 

問題: 在CSV的第二行中,年齡值爲空白。當我的程序檢查File1中的第二行和File2中的第二行時,它們不相等,因此它也會給相應的行賦予錯誤。

需要做什麼:我必須忽略空格並檢查下一個出現的值,如果兩者相等,則將file1的第二行向下移動。

輸出必須是這樣的

 **File1**    **File2** 
    <name>abc</name> | <name>abc</name> 
         | 
     <age>21</age> | <age>21</age> 
<company>zyz</company> | <company>zyz</company> 

這裏是我到目前爲止已經試過

public List<String> FileCompare(String source, String target) { 
try { 
    //String source="D:/reference.xml"; 
    //String target="D:/comparison.xml"; 
    //Diff d=new Diff(myControlXML, myTestXML); 
    FileReader fr = new FileReader(source); 
    FileReader fr1 = new FileReader(target); 

    BufferedReader br = new BufferedReader(fr); 
    BufferedReader br2 = new BufferedReader(fr1); 

    String s1,s2; 

    String st= new String(); 
    String st2= new String(); 


    while((s1 = br.readLine()) != null) { 
      myList.add(s1); 
      st=st.concat(s1); 
      //System.out.println(s1); 
    } 

    Collections.addAll(myList, "#########Start of target#########"); 

    while((s2 = br2.readLine())!=null){ 

     st2=st2.concat(s2); 

     myList1.add(s2); 
    } 
    myList.addAll(myList1); 
    System.out.println(myList); 
    //System.out.println(myList1); 
} 
catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
return myList; 
} 

這裏是主代碼

Compare c=new Compare(); 
//FileCompare returns CSV string 
List<String> s=c.FileCompare("D:/reference.xml", "D:/comparison.xml"); 

String pdf=s.toString(); 
String[] tokens=pdf.split(","); 
for(String token:tokens) 
    System.out.println(token); 

如何我是否會這樣做忽略空白?請幫忙

很多謝謝!

+0

你如何將其轉換爲CSV?你有沒有考慮過像SAX和DOM這樣的解析器?你想通過比較來實現什麼? –

+0

@DuniyaHilaDalunga - 這裏是更新後的帖子,我如何將它轉換爲CSV – shockwave

回答

0

如果兩個循環都不爲null,則不會檢查它是否實際上已滿了空格,而是將它們連接成一個字符串。請嘗試以下方法防止追加空行:

s1 = br.readLine(); 
while(s1 != null) { 
    if(s1.trim().length() > 0) { 
     myList.add(s1); 
     st=st.concat(s1); 
     //System.out.println(s1); 
    } 
    s1 = br.readLine(); 
} 

同樣爲s2和他的循環。

0

我想你是分割文件到逗號分隔值。所以你有兩個逗號分隔值數組,每個對應於特定的文件。 比較兩個數組的第一個值。如果它們相等,則爲兩個數組增加計數器。如果遇到任何條目的空白空間,請單獨增加該計數器。如果在兩個數組中都遇到空條目,則同時增加這兩個值。

我希望你得到了算法。

+0

嘿,我沒有得到你!這是你的意思是對的嗎?對於(int j = 0; j shockwave

相關問題