1

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 の 2 行目の age 値が空白です。私のプログラムが File1 の 2 行目と File2 の 2 行目をチェックすると、それらは等しくないため、対応する行にも false が返されます。

達成する必要があること: 空白を無視して、次に発生する値を確認する必要があります。両方が等しい場合は、file1 の 2 行目を下に移動します。

出力は次のようになります

       **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);

空白を無視してこれを行うにはどうすればよいですか? 助けてください

どうもありがとう!

4

2 に答える 2

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彼のループにも当てはまります。

于 2013-02-08T13:39:59.060 に答える
0

ファイルをカンマ区切りの値に分割していると思います。したがって、カンマ区切りの値の2つの配列があり、それぞれが特定のファイルに対応しています。両方の配列の最初の値を比較します。それらが等しい場合は、両方の配列のカウンターをインクリメントします。いずれかのエントリに空のスペースがある場合は、そのカウンターだけをインクリメントします。両方の配列に空のエントリがある場合は、両方をインクリメントします。

あなたがアルゴを手に入れたことを願っています。

于 2013-02-08T10:53:04.913 に答える