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

相关问题