【问题标题】:How to compare two files in java when the order of elements does'nt matter当元素的顺序无关紧要时如何在java中比较两个文件
【发布时间】:2014-06-25 12:18:22
【问题描述】:

我想比较 2 个文件并检查内容是否相等。但问题是文件中的数据顺序不同。即使元素未按相同顺序放置时内容相等,equals() 方法也会返回 false。 java - 如何通过忽略顺序来比较这些文件? 最好的问候!

【问题讨论】:

  • 这里的元素是什么意思?线?
  • 这取决于你的文件格式:是什么让它相等?
  • 我认为最好的方法是将两个文件分成两组 A 和 B,然后你可以做很多事情,例如检查集 A 和 B 包含相同的“字符串”
  • 我的意思是,我有两个包含一些元素的 csv 文件。例如,file1.csv 包含 A;B;C;D;E,file2.csv 包含 B;D;A;E;C。当我写 file1.equals(file2) 时,代码返回 false,因为即使内容相同,顺序也不相同。所以,我的问题是:我怎样才能告诉程序忽略命令;只是为了检查 file1.csv 的元素是否在 file2.csv 中。非常感谢您的回答。 (请原谅我的英语;))
  • 从 file1 和 file2 读取数据并将字符串存储到 Set set1 和 set2。如果两者都包含元素,那么 (set1.equals(set2)) 将返回 true。

标签: java file compare


【解决方案1】:

这是你想要的代码:

 Scanner input1= new Scanner(new File("C:/file1.txt");
 Scanner input2= new Scanner(new File("C:/file2.txt");
 String one= input1.nextLine();//assuming files contain only one line
 String two= input2.nextLine();//assuming files contain only one line
 Set<String> set1 = new HashSet<String>(Arrays.asList(one.split(";"));
 Set<String> set2 = new HashSet<String>(Arrays.asList(two.split(";"));

 System.out.println(set1.equals(set2));

【讨论】:

  • 谢谢@nafas!此代码适用于一行。由于我的文件包含多行,我使用了这样的 while 循环:while(input1.hasNext() && input2.hasNext()){ // 我实现了你的代码 } 我得到了预期的结果。再次感谢您
  • @Kazman 我确实提到该代码仅适用于一行:)。但我很高兴它对你有用。
【解决方案2】:

将所有元素添加到集合并比较集合。注意:集合将忽略重复项。

或者您可以对所有元素进行排序并比较结果。只要排序一致,您如何对它们进行排序并不重要。即原始订单不会改变结果。如果有重复,请使用它。

【讨论】:

  • 谢谢彼得 :) 我尝试了应该忽略顺序的 set Collection,但它不起作用。这是我的代码: String content1 = new Scanner(new File("C:/file1.txt")).next(); String content2 = new Scanner(new File("C:/file2.txt")).next(); System.out.println(st1.equals(st2));回报是假的!我提醒 file1 包含 A;B;C 和 file2 包含 B;C;A
  • but it does'nt work. 你能展示一下你是如何尝试使用这套设备的吗?
  • 对不起彼得,我忘了写整个代码。但是 nafas 给了我一个很好的,但它只适用于只包含一行的文件
  • @Kazman 所以更改代码以使用循环读取多行。
  • 是的,我做到了,我得到了预期的结果。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2014-03-21
  • 2011-12-11
  • 1970-01-01
  • 2018-05-19
  • 2011-06-10
  • 2023-03-15
相关资源
最近更新 更多