我正在尝试从两个文件读入并将它们存储在两个单独的arraylists中。这些文件包含单独在一行上的单词或由逗号分隔的行上的多个单词。 我用以下代码(不完整)读取每个文件:
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万个单词(我不知道确切的数字),所以我不完全确定上面的代码是否正常工作 - 但似乎是这样。
我现在想知道第一个文件/ arraylist有多少单词是独占的。为此,我计划使用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;
}
我的主要方法包含一些不同的调用,一切正常,直到我到达上面的代码,这只会导致程序挂起(在netbeans中它只是“正在运行”)。
知道为什么会这样吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:-1)
试试这个:
for(String s1 : file1){
for(String s2 : file2){
if(s1.equals(s2)){file1.remove(s1))}
}
}