0

我正在尝试从两个文件中读取并将它们存储在两个单独的数组列表中。这些文件由单独在一行上的单词或在一行上用逗号分隔的多个单词组成。我使用以下代码读取每个文件(不完整):

ArrayList<String> temp = new ArrayList<>();

FileInputStream fis;
fis = new FileInputStream(fileName);

Scanner scan = new Scanner(fis);

while (scan.hasNextLine()) {
    Scanner input = new Scanner(scan.nextLine());
    input.useDelimiter(",");
    while (scan.hasNext()) {
        String md5 = scan.next();
        temp.add(md5);
    }
}
scan.close();    

return temp;

每个文件包含近 100 万个单词(我不知道确切的数字),所以我不完全确定上面的代码是否正常工作 - 但似乎可以。

我现在想找出第一个文件/数组列表独有的单词数量。为此,我计划使用list1.removeAll(list2)然后检查 list1 的大小 - 但由于某种原因,这不起作用。编码:

public static ArrayList differentWords(String fileName1, String fileName2) {
    ArrayList<String> file1 = readFile(fileName1);
    ArrayList<String> file2 = readFile(fileName2);

    file1.removeAll(file2);

    return file1;
}

我的 main 方法包含几个不同的调用,并且一切正常,直到我到达上面的代码,这只会导致程序挂起(在 netbeans 中它只是“运行”)。
知道为什么会这样吗?

4

2 回答 2

1

你没有input在使用

while (scan.hasNextLine()) {
  Scanner input = new Scanner(scan.nextLine());
  input.useDelimiter(",");
  while (scan.hasNext()) {
    String md5 = scan.next();
    temp.add(md5);
  }
}

我认为您打算这样做:

while (scan.hasNextLine()) {
  Scanner input = new Scanner(scan.nextLine());
  input.useDelimiter(",");
  while (input.hasNext()) {
    String md5 = input.next();
    temp.add(md5);
  }
}

但这就是说您应该研究一下String#split(),这可能会为您节省一些时间:

while (scan.hasNextLine()) {
  String line = scan.nextLine();
  String[] tokens = line.split(",");
  for (String token: tokens) {
    temp.add(token);
  }
}
于 2013-06-03T08:34:26.450 回答
-1

尝试这个 :

for(String s1 : file1){
    for(String s2 : file2){
        if(s1.equals(s2)){file1.remove(s1))}
    }
}
于 2013-06-03T08:55:17.783 回答