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 的第二行中,年龄值是空白的。当我的程序检查 File1 中的第二行和 File2 中的第二行时,它们不相等,因此它也为相应的行提供 false。

需要实现的目标:我必须忽略空格并检查下一个出现的值,如果两者相等,则将 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);

我如何通过忽略空格来做到这一点?请帮忙

非常感谢!

4

2 回答 2

0

我猜您正在将文件拆分为逗号分隔值。因此,您有两个逗号分隔值数组,每个数组对应于特定文件。比较两个数组中的第一个值。如果它们相等,则增加两个数组的计数器。如果遇到任何条目的空白空间,则单独增加该计数器。如果在两个数组中都遇到空条目,则增加两者。

我希望你得到了算法。

于 2013-02-08T10:53:04.913 回答
0

如果字符串不为空,则两个循环都会连接一个字符串,而不检查它是否实际上充满了空格。尝试以下操作以防止附加空行:

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

fors2和他的循环也是如此。

于 2013-02-08T13:39:59.060 回答