2013-02-08 70 views
0

我想比较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); 

如何忽略空格/ e空行?

非常感谢!

+0

@monishchandrashekar如果你第一次没有得到足够的重视,不要再问一个问题。我正在回答你的原始问题,并投票结束这一问题。 – Gamb 2013-02-08 13:42:17

+0

'st = st.concat(s1)'的目的是什么;'无论如何? – KidTempo 2013-02-08 13:48:26

回答

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

这会将空格添加为空字符串 - 没有解决问题。 – KidTempo 2013-02-08 13:42:46

1

你可以尝试只添加一行到列表中,如果它是大于零长:

if (s1.trim().length() > 0) 
{ 
    myList.add(s1); 
    st = st.concat(s1); 
} 

if (s2.trim().length() > 0) 
{ 
    myList1.add(s2); 
    st2 = st2.concat(s2); 
} 

trim()应消除潜伏在该行的任何空格。