比较两个列表并获取唯一列表(example.txt)java

时间:2011-05-27 10:35:37

标签: java

我在这里找到了一个很好的代码,可以帮助我完成一件事。 但我需要的是: 我有两个列表,一个列表是example1.txt,而sencond列表是example2.txt我需要得到相似和不同。我不知道在哪里设置c://example1.txt和c://example2.txt

例如:Arrays.asList(c://example1.txt);

import java.util.Collection;
import java.util.HashSet;
import java.util.Arrays;

class Repeated {
      public static void main( String  [] args ) {

          Collection<String> listOne = Arrays.asList("1","2","3");

          Collection<String> listTwo = Arrays.asList("1","2","2");

          Collection<String> similar = new HashSet<String>( listOne );
          Collection<String> different = new HashSet<String>();
          different.addAll( listOne );
          different.addAll( listTwo );

          similar.retainAll( listTwo );
          different.removeAll( similar );

          System.out.printf("One:%s%nTwo:%s%nSimilar:%s%nDifferent:%s%n", listOne, listTwo, similar, different);
      }
}

2 个答案:

答案 0 :(得分:4)

据我了解,您不知道如何将文本文件读取到列表中。有很多选择:

  • commons-io IOUtils.readLines(new FileInputStream("c:/example.txt"))
  • 使用new BufferedInputStream(new FileInputStream(..))然后使用readLine()方法
  • 循环

要正确处理编码,您需要使用new InputStreamReader(inputStream, "utf-8")

<强>更新

您的文件似乎只包含一行。使用彼得提醒我的FileUtils

String str = FileUtils.readFileToString("c:/filename.txt");
String[] numbers = str.split(",");
List<String> list = Arrays.asList(numbers);

答案 1 :(得分:2)

听起来像家庭作业,但我会咬人。我会使用FileUtils

Set<String> example1 = new LinkedHashSet<String>(
                               FileUtils.readLines(new File(args[0])));
Set<String> example2 = new LinkedHashSet<String>(
                               FileUtils.readLines(new File(args[1])));
Set<String> same = new LinkedHashSet<String>(example1);
same.retainAll(example2);
Set<String> different = new LinkedHashSet<String>(example1);
different.removeAll(example2);

如果您在值之间有一个,,则可以使用

Set<String> example1 = new LinkedHashSet<String>(
   Arrays.asList(FileUtils.readFileToString(new File(args[0])).split("[,\\s]")));