public class TestArticles {
public static void handlewords() throws IOException {
String path = "C:\\Features.txt";
String path1 = "C:\\train.txt";
String path2 = "C:\\test.txt";
File file = new File(path2);
PrintWriter pw = new PrintWriter(file);
Features ft = new Features();
String content = ft.readFile(path);
String [] words = content.split(" ");
FileReader fr = new FileReader(path1);
BufferedReader br = new BufferedReader(fr);
String line = null;
while ((line = br.readLine()) != null) {
String [] word = line.split(" ");
List<String> list1 = new ArrayList<String>(words.length);
List<String> list2 = new ArrayList<String>(word.length);
for(String s: words){
list1.add(s);
HashSet set = new HashSet(list1);
list1.clear();
list1.addAll(set);
}
for(String x: word){
list2.add(x);
HashSet set = new HashSet(list2);
list2.clear();
list2.addAll(set);
}
boolean first = true;
pw.append("{");
for(String x: list1){
for(String y: list2){
if(x.equalsIgnoreCase(y)){
if(first){
first = false;
} else {
pw.append(",");
}
pw.append(list1.indexOf(x) + 39 +" "+ "1");
}
}
}
pw.append("}");
pw.append("\r\n");
pw.flush();
}
br.close();
pw.close();
}
我的输出文件是这样的:
- {23 1,35 1,56 1,56 1,...}
- {2 1,4 1,7 1,...}
第一行一些数据重复,第二行所有数据按顺序排列,没有重复数据。我怎样才能删除那些重复的数据?我已经使用过 hashset,但是它没有用。
最佳答案
list1
和 list2
中的项目正确地唯一,但区分大小写。因此,您可能在其中包含 man
和 Man
之类的项目。但是在最后一个循环中,你使用了 x.equalsIgnoreCase(y)
,因为 "man".equalsIgnoreCase("man")
和 "man".equalsIgnoreCase ("MAn")
都是真的,这就是重复出现的方式。
有几种方法可以解决这个问题:
- 当您构建
list1
和list2
时,将项目小写 - 或者,使用
TreeSet
而不是HashSet
,并使用忽略大小写的比较器 - 将
x.equalsIgnoreCase(y)
更改为x.equals(y)
关于java - 如何删除arraylist java中的重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23020328/