2013-02-08 2 views
0

자바에서 텍스트 파일을 비교하려고합니다. 다음 발생 행에서 문자열을 검색하려면 어떻게합니까 (공백을 무시합니까?)?텍스트 파일을 비교하는 방법은 무엇입니까?

예 :

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

문제 : 두 번째 줄에서

내 논리에 현재
 **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 문자열을했습니다 CSV의 연령 값이 비어 있습니다. 내 프로그램이 File1의 두 번째 줄과 File2의 두 번째 줄을 검사 할 때이 둘은 동일하지 않으므로 해당 줄도 false가됩니다.

달성해야 할 것 : 공백을 무시하고 다음 발생하는 값을 확인해야합니다. 두 값이 같으면 file1의 두 번째 줄을 아래로 이동해야합니다.

출력은 다음이

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

같이 있어야하는 것은 지금까지 시도한 것입니다 :

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); 
: 여기
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; 
} 

메인 코드

공백/e를 어떻게 무시합니까? 빈 줄?

감사합니다.

+0

@monishchandrashekar 처음으로 충분히주의를 기울이지 않았다면 다시 질문하지 마십시오. 나는 원래 질문에 대한 나의 대답을 움직이고이 질문을 끝내기 위해 투표를하고있다. – Gamb

+0

어쨌든'st = st.concat (s1);의 목적은 무엇입니까? – KidTempo

답변

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

이렇게하면 빈 문자열로 공백이있는 행이 추가되어 문제가 수정되지 않습니다. – KidTempo

1

당신은 더 이상 0이 아닌 경우 목록에 행을 추가 만 시도 할 수 :

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()

이 라인에 숨어있는 공백을 제거해야합니다.

관련 문제