我在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 :(得分:0)
我猜您将文件拆分为逗号分隔值。因此,您有两个逗号分隔值数组,每个数组对应于特定文件。 比较两个数组中的第一个值。如果它们相等,则为两个数组增加计数器。如果您遇到任何条目的空白空间,请单独增加该计数器。如果您在两个数组中都遇到空条目,则递增两者。
我希望你能得到算法。
答案 1 :(得分:0)
如果它不是null,那么你的两个循环都会串起一个String,而不检查它是否真的满了空格。请尝试以下操作以防止添加空行:
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
及其循环。